1、
借书的时候,要填写借阅时间吧, 填错了,可以修改吧,漏填了,还可以补上吧,这都需要setter。
软件是现实的映射,对现实的记录(不管是过去的,还是正在发生的),现实变了,记录也要随之变。
不是不了解DDD的人会被我误导,而是了解DDD的人会自我误导。
一无所知的状态下,更容易理解四象图,因为四象图实在非常平常。稍微注意、提炼自己平时看生活出现的各种情景的方式即可。
历史可以理解为由事实组成,因为历史只是世界的一部分。
此外,在与uda1341交流时,我曾说过,四象图不是OO建模,甚至不是建模本身,四象图更多关注的是语言的组织(原语,通过组织语言来组织信息,进而建模),而不是语言本身(比如OOP, FP,SP, FOP等)。
2、
JiveJdon中有一个类叫ForumState,记录了论坛里发了几个帖子等信息,可理解为论坛本身的计数器。
每一本书的数量信息不是由书(book)来记录,而是由书的计数器(bookCounter)来记录。
值得再次强调的是,没有本质。如果非要说本质(最常见的作用),那么书的本质,“可能”是在于记录信息,传递信息。
3、
模型是自由的,场景规约表示在场景中对其进行必要的约束。
你几点上班、几点下班,都是有场景规约(公司的规章制度)指定的,不是由你(模型)决定的。
setter不代表“不安全”。对外界的暴露程度,如果有需要,可以通过private, protected, package,public,等访问权限控制修饰符来调整。
4、
Account和Card都是工具(前者是后者在软件中的映射),如果Account/Card有其他用途,可将其身上借阅功能剥离出来,放在Book Borrower这个角色上。
之前的讨论我也忘掉差不多了,那个帖子中我最最强调的一点是“无之以为用”,其它的都是旁枝末节。
说些题外话,前段时间,我就删掉了自己一字一字敲打下来的数万笔记,虽然有点舍不得,但心一狠,shift+delete。
旧的不去,新的不来,为了更好地接触一些新的有趣的东西,惟有如此。所以,别怪我,自己写得东西怎么都记不清了。
挺感谢以前的老大,鼓励我将自己的思考记录整理出来,与同事们分享,原来我的习惯只是找一个人聊聊,就完事,不习惯与太多的人进行交流。
5、
正在发生的是事实。行为结果是事实,行为过程也是事实。
一切都是事实,过去的、现在的、将来的,不变的,可变的都是事实。
你不妨重新思考一下,维氏的原话。
事实是什么?事实是信息,不是物质(事物、对象),不是能量(运动、过程),而是在它们之上携带的可感知(有趣或有用)的信息。
软件中,我们关注的不是物质本身(书),也不是运动过程(被借走的书),而是物质与运动携带的信息。
我们定义Book只是描述某书的一些基本信息,用BookCounter描述某书总有几本,还有几本;用BorrowedBook描述此书何时被谁借走等信息。
6、
借书与还书是相对“独立”的场景,因为它们常常发生在不同的时间段。
将借、还时间都放在borrowedBook上,是因为关注其整体,比割裂它们更有实际意义。
7、
DDD、DCI、彩色UML与四象图并不是毫无关系,它们至少是我提出四象图的一些参考资料。
从oojdon那张图,我认为他理解了我的意思;gtalk上有位道友,我认为他也基本上理解了我的意思。
没有这些背景知识,可能更容易理解四象图。
凝聚特征一般的方法非常简单呀,传参赋值即可。
为什么你要想成那么复杂呢?我平时写代码,几乎感觉不到它的存在。
比如写Android UI代码时,实现事件监听器,传给控件,即凝聚行为特征呀。
在动态、凝聚多个特征时,才可能需要引入设计模式来解决。
我不知道为什么:
一提MVC,就需要MVC框架;
一提DCI,就需要DCI框架;
一提赋值就需要IoC、AOP框架;
在中小规模的应用开发中,根本不需要任何框架。
(框架未必能降低复杂度)
只要代码遵行MVC、DCI的组织方式即可,
比如JSP只管视图渲染,Servlet只管行为控制等等。
虽然我自信对于设计模式(不止GoF的23个模式)的理解,比不少工作多年的人都要深刻得多,但我几乎不用(刻意使用),除非有必要,或自然而然。
8、
当一个人老之将至时,脑海浮现出过去的一个个画面(场景)。
当他参加舞会时,穿着漂亮的礼服、拿着话筒(凝聚结构特征),担任主持人(凝聚行为特征),
这些特征离开舞会时,就可以没了。
当他去超市购物时,推着购物篮(凝聚结构特征),充当顾客(凝聚行为特征),这些特征离开
超市时,就可以没了。
结构特征表示模型在场景具有的“形”方面的信息;行为特征表示在场景具有的“神”方面的信息。
场景规约,如舞会的一些约定,超市的一些守则等。
一切都在变化中,四象图的概念都与时间有关。
场景规约,如果是类似于F = ma, E = mc^2之类的普遍法则,可理解为与时间无关,具有永恒性。