跳至主要内容

博文

目前显示的是 八月, 2014的博文

ImplDDD 阅读笔记 - Value Objects, Part 1

Values types that measure, quantify, or describe things are easier to create, test, use, optimize, and maintain. Domain model 中真正的 Value Objects 并不是业务领域中的一种物品 (thing),它是用于测量、量化或是描述物品的。例如,一个人的年龄,它并不是一件事物,而是用来量化这个人从出生到现在的年数。 如果设计正确,Value Objects 的实例在创建之后就可以被随意传递,开发者可以即刻忘记这类对象,无论它们的生命周期是长是短,更无需担心对象的值是否被修改。在解决 Ubiquitious Language 的时候,确定正在建模的 domain concept 是否适合 Value Objects 是第一要务。有这么几个标准可以用来辅助判断: + It measures, quantifies, or describes a thing in the domain. + It can be maintained as immutable. + It models a conceptual whole by composing related attributes as an integral unit. + It is completely replaceable when the measurement or description changes. + It can be compared with others using Value equality. + It supplies its collaborators with Side-Effect-Free Behavior. 在绝大多少情况下,Value Objects 都是 immutable 的,一旦它们被创建出来,就无法再修改它的值。在 Java 或是 C# 这样的语言中,开发者往往使用 constructor 来构造 Value Objects 的实例,传入的参数被用于确定该对象的全部状态。构造参数可能直接被保存为 Value Objects 的 attributes,也可能被用于推导 (derive) 出对象内的一个或是若干 attributes...

ImplDDD 阅读笔记 - Validation

讨论 Validation 的时候,不得不提及 Self encapsulation,objects 的 constructor 将成员变量的赋值代理给各自的 setter methods 来执行,而 setter 可以检查对象自身是否具有合适的 state。本书的作者并不认同将 self encapsulation 视作为 validation 的一种,因为从单一职责的角度来看,更适合由独立的 validation class 而不是 domain class 自己来执行 validation 操作。他对 self encapsulation 的看法是,assertions that follow a design-by-contract approach。所谓的 design-by-contract 是由 Bertravel Meyer 在 Eiffel 语言中所提倡的,可以具体细分为 pre-condition, post-condition 和 invariants of the components。 The primary reasons to use validation in the model are to check the correctness of + any one attribute/property, + any whole object + or, any composition of objects. Domain model 的 validation 被划分为三个层次,也就是说,即使一个 Entity 中所有的 attributes/properties 都有效,这个 Entity 还是可能由于 attributes 的组合状态无效。因此,还是要用 Specification 或是 Strategy 来对整个 Entity 的状态来执行校验。 由于整个 Entity 的 state 必须对 validation 可见,并不表示将 validation processing 内嵌在 Entity 里是个好主意。很多时候对于 domain object 的 validation 逻辑的修改比起对于 domain model 本身的业务逻辑的修改来的更为频繁!此外,从 responsibility 的角度来考虑也应当独立出 ...

探索家用 NAS (三)

在考虑了市场上各种选择之后,选择了 Asustor 的一款四盘位产品,从硬件配置来看,这台 NAS 配备了 Intel Atom CPU,足以支持多媒体解码以及安装五花八门的 apps,标配内存 1GB,如果嫌少自己还可以加一条最大 2GB 的笔记本内存。 两盘位的 NAS 直接被过滤掉了,因为仅支持 RAID0 和 RAID1,家用网络的瓶颈往往并不是速度,现在大部分的无线路由器或是 HUB 都提供了一定数量的千兆网口,看看测评报告就会发现不少产品的 RAID0 速度也真没快到哪去。至于 RAID1,不选择的原因是它需要 1:1 的备份消耗,性价比不足。超过四盘位的 NAS 对我来说过于高级,因此就只剩下了可以配置 RAID5 或是 RAID10 的 4 Bays Device。 从软件的角度来看,如果自行组建 NAS,的确有像是 FreeNAS 或是“黑群晖”这样的操作系统可用,但是看了很多人的配置经历觉得并不是很理想,花的功夫不少,有兴趣的朋友可以看看 知乎上的这一个问答 (好吧,俺承认主要是懒得动手折腾)。像是 Synology、QNAP 这些台系厂商最近几年大力研发自己的平台,对于 web interface 和移动终端的支持都已经很丰富了。Asustor 虽然是后起之秀,不过看大量的评测也对于他家的 ADM 给予了肯定。 于是,就要下单了……