勿忘初心之回头是岸
序
领域驱动设计中第一部分(消化知识,交流与语言的使用,绑定模型和实现)很好的描述了我现在很想学习的部分。
最近很长一段时间处于纠结阶段,看书很慢,无法静下心来,想想还是要去钓钓鱼,静静心,放空自己。
勿忘初心,回归自我,回归是岸,重头再来。
将一些内容记录下来吧!
持续学习
当开始编写软件时,其实我们所知甚少。项目知识零散地分散在很多人和文档中,其中夹杂着其他一些无关信息,因此我们甚至不知道哪些知识是我们真正需要的知识,看起来没有什么技术难度的领域很可能是一种错觉-----我们并没有意识到不知道的东西究竟有多少。这种无知往往会导致我们做出错误的假设。
项目都有出现知识丢失,已经学到一些知识的人可能干别的事情去了,团队可能由于重组而被拆散,这导致知识又被重新散开。被外包出去的关键子系统可能提交回来的只是代码,而不是知识的传递回来。而且当使用典型的设计方法时,代码和文档不会以一种有用的形式表达出这些来之不易的知识,因此一旦由于某种原因人们没有口头传递知识,那么知识就会丢失。
直到现在我都没法了解现在业务行业里面哪些是重要的,哪些是不重要的。我可以随口说出很多专业名词,但是这些名词在这个领域起到的作用又哪些。引用相声界小岳岳的一句话“我只是一个小学生”。
有着丰富知识的人,在构建软件的时候,不是简单的“发现名词”。
在业务系统中我们建模的时候,往往是和数据库挂钩,我们也是往往寻找实体和值对象的关系,但是我们往往没法找到隐藏的的概念。
其实在我们建模的时候我们应该不要局限于寻找实体和值对象的关系,我们才能充分吸取知识,因为业务规则之间可能会存在不一致。而我们的领域专家会反复研究所有规则,解决规则之间的矛盾以及尝试来弥补规则的不足。
最小的领域抽象
建模并不会将一个复杂的软件系统给简单化,只是将一个庞大的系统变得更加清晰明朗而已。
简单的提炼了一下现有系统的一个简单模型。
图1这里面并没有将Robot和Patrol整合,因为我发现先将Robot模型创建起来,然后将和Patrol合并起来会更加好的理解。
模型之间的关系成为所有语言都具有的组合规则。
Robot建模只是将Robot一个实体进行一个简单的符合可变性和不可见性以及一致性的重要特性(软件开发的不变事实)的建模。
对于了解Robot的人而言,其实Robot有很多Module组成。而每一个Module其实就是一个领域。那么对于软件而言哪些又是它最关心的核心部分呢?
Computer由CPU,Memory,Mainboard,HardDisk,OS,GPU等一些列内容组装而成,那么对于Computer性能测试软件对于Computer建模肯定要比一个生产行业里面Computer管理软件对于Computer的关心点肯定要少很多。
来一点畅想,假设重新开始Robot系统规划,规划一个系统又很多种方式,而每一种方式又有着不同的特征,其实对于我而言,设计系统往往无法力不从心,因为对于需求的收集往往无法得到第一手的消息或者说信息,无法剥离哪些到底是客户真实需要的。
从软件需求到系统设计,然后从系统设计到领域模型建设,我认为这是一条链路,任何一个环节都不可以断,这条链路明确的表明了软件系统的最终目标。
从头开始-理论支撑(软件过程)
系统规划的方式-SWOT(Strength,Weakness,Opportunity,Threat):SWOT方法以调整组织的Strength,Weakness,Opportunity,Threat的方式进行IS(Infornation System)开发项目的识别,分类,排序和选择。这是一个从确认组织使命开始的,自上而下的方法。
系统规划的方式-VCM(Value chain model):VCM是通过分析组织中完整活动链(从原材料到销售及运送给客户的最终产品)来评估竞争优势。在价值链方法中,产品或者服务是将价值转交给客户的媒介。如果一个链接比较薄弱,将导致整个链路的崩溃。模型的目的是理解哪种价值链配置将产生最大竞争优势。IS开发项目可以将针对哪些环节,操作,分配渠道,销售方式等给出最具备竞争力的优势。
系统规划的方式-BPR(Business Process re-engineering):在使用BPR规划系统的时候,当前组织必须彻底改造自己,并且抛弃那些现在正在使用的功能分解,分层结构和操作原则(其实这个是很难的,因为这会确切的影响到利益相关者【利益相关者是在软件项目中存在利害关系的人。任何受到系统影响或对系统开发产生影响的人,都是相关者。其中主要包含:用户,开发者(需求分析人员,设计人员,程序员)】)。但是我们有没有发现我们的业务过程是否就是被定义成“采取一种或者多种输入,并且创造对客户有价值的输出活动集合”。
BPR认为业务过程必须跨域许多部门僵化的组织结构的观点已经过时。组织必须关注业务过程,而不是个别的任务,工作,人员或者部门功能。这些过程横向跨域了业务,并且在与客户的交互点上结束。“过程企业和传统组织之间最明显的区别是过程所有者的存在”。
BPR的主要目的是在组织中从根本上重新设计业务过程。必须对业务过程进行识别,流程化和改进。在工作流图中对过程文档化,并经历了工作流分析。工作流捕获了业务过程中的事件,文档和信息流。并且可以用来计算这些活动所花费的时间,资源和成本。
以上三种系统规划其实都是自上而下发起的。下面ISA则是自下而上发起的。
系统规划的方式-ISA(Information system architecture):ISA是一个自下而上的论证方法,它能够适应各种业务的策略的IS解决方案提供的中立的系统结构框架。
ISA常常会有5中角色参与到里面(规划者,所有者,设计者,创造者,承包者)。
ISA通常由6个问题来解决上述5个角色参与者所对应的关键工作内容:
1:这件事由什么构成?
2:这件事是如何起作用的?
3:这件事位于何处?
4:谁与这件事一起工作?
5:这件事何时发生?
6:这件事为何而发生?
以上。
还是没有写完,读书笔记其实很难,特别是将二本书的笔记合并为一份笔记。
软件过程,需求确认,领域驱动,系统设计,业务学习缺一不可。想做到自己理想的位置,看来还是需要专心一些非工作以为的东西。