时长:大小14.66M
作者回复: 欢迎讨论!这是一个很有意思的问题,这里说一下个人的看法。 其实咱们的差异不在于事实上的差异,而是对概念定义的差异,也就是说,你所说的“分析/设计”和本课程所说的“分析/设计”的概念定义不同。后面的立论自然就不同了。就好比,一个天津人和一个广州人聊粽子。天津人说粽子是甜的,没有肉;广州人说粽子是咸的,有肉。这两个人永远无法统一,因为他们说的粽子不完全是一样东西。分析和设计这两个词的理解,业界本来就有歧义。 “分析”这个词,至少包含两层意思,一个是“需求分析”,一个是“系统分析”。 “需求分析”在UP里就简称“需求”,就是您所理解的“分析”,也就是记录现实世界的产物,相当于本课程中捕获行为需求的层面。 “系统分析”指的是对需求分析的结果进行抽象,产生领域模型。领域模型中仍然是业务概念,但是是经过抽象的。这就是本课程里的“分析”。 再说“设计”。有广义和狭义之分。 您所说的设计是广义的,也就是以“需求”(您所说的“分析”)的产出物为输入,得到整个解决方案的过程。其实“领域驱动设计”中的设计也是这种广义的理解。 本课程所说的设计是狭义的,也叫“系统设计”,指的是以“系统分析”的结果(也就是领域模型)为输入,产生系统设计模型(包含了业务人员不需理解的技术关注点)的过程。 换句话说,您所说的分析和设计的关系,相当于本课程所说的“问题空间”和“解空间”的关系。 本课程中“需求”、“分析”、“设计”三个概念,与UML三巨头的《统一软件开发过程》、Larmman的《UML和模式应用》以及潘加宇的《软件方法》基本上是一致的。您也可以参考一下。 总之,我们要把基本概念对齐,才有继续谈下去的基础。不知道我是否解释清楚了。
作者回复: 读后感很赞👍🏻 思考题1的回答,我理解你是说了业务和技术的不同关注点,这种不同关注点常常最终引起对需求理解的不一致。
作者回复: 1)首先是组织和沟通问题,最好进行产品化的组织转型(按产品把产品和研发划分到一个部门,共享KPI), 这超出了DDD的范围。如果动作不想太大,至少要让产品和技术理解沟通的价值,可以组成虚拟团队。其次是把DDD的动作融入到开发规范,产品和研发共同遵守。最好才是工具,一是产品和研发容易共享,二是做好版本控制。可以用Wiki,文件服务器、在线文档、Git等等。 2)划分限界上下文 3)不一定要用事件风暴,可以用任何能说明需求的方式,领域建模才是关键。
作者回复: 整体思路是对的。拿您现在的例子引申一下。如果虽然暂时满足了需求,但后来产品提了一个新需求,站在产品的角度,应该只需要系统改一点点就能实现,而开发却要大动干戈,那么设计模型八成有问题。反之,如果系统实现得正确,简洁,功能易扩展,那么可能是产品的模型不恰当。关键是,目前只有系统完成才能知道,有撞运气的感觉。DDD则让产品和开发在事前就把细微的概念理解通过模型一起搞清楚,达成一致,免得后面碰运气。
作者回复: 你看了事件风暴和故事的联系👍🏻
作者回复: 1,这个问题很好,模型虽然兼顾业务视角,表现上却都是业务语言。现在的例子体现不出,第二迭代讲泛化时会提一下。 2,哲学上,认识事物最关键就是理解事物间的关系。。。
作者回复: 看来你是渐入佳境了 :)
作者回复: 需要再深入了解您项目的具体情况才能给出有价值的建议。就我个人经验,这些问题还是由于没有深入掌握建模技能造成的,也就是说,领域模型不能真正反映深层的领域知识,所以效果就不大了。建议您根据后面的课程,把领域建模学得更深入一些,看看能否解决问题。您也可以把您的实际案例在咱们的交流群里讨论一下。案例越具体,我越能给出有效的建议。
作者回复: 都是来自于同一源头😃
作者回复: 是的,基本是前一种。脚手架只是在编码阶段可能有些帮助。脚手架和整个DDD方法不在一个层面。