目录
一、为什么要谈论OOA、OOD、OOP?
二、你知道OOA、OOD、OOD对软件工程师的重要性?
三、DDD、OOA、OOD、OOP和OOT到底有什么区别和联系?
一、为什么要谈论OOA、OOD、OOP?
OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程),这3个概念,对于我们JAVA程序员来
讲,或多或少应该都有所了解,或者说至少都听说过。但是要谈到对其理解,可能对于多数入行不深的从业者来
说,确实不是那么容易做到。
特别是对于绝大多数的3年以内的低中级软件工程师而言。
因为他们的工作更多是需要按照项目经理分配的任务来编写功能代码,很少有多余的时间去阅读或者思考一些概
念性的东西。说起这个问题,我也在网络上也搜索过很多的资料,大多摘录至书籍,比较官方化。让初学者无从
理解。
为了广大的新从业者或者应聘者,在这里,我们需要以一种实例的方式来对这3个概念进行重新的阐述:
- OOA面向对象分析(Object-Oriented Analysis)
- OOD面向对象设计(Object-Oriented Design)
- OOP面向对象编程(Object Oriented Programming)
二、你知道OOA、OOD、OOD对软件工程师的重要性?
OOA,OOD,OOP是针对现实的需求最终输出产品过程。
在现实中OOA,OOD并没有显著的区分。OOA,OOD,OOP有时是不断的交替进行。
较为好理解的是,面向对象分析的结果可以作为开始面向对象设计的模型,面向对象的设计结果可以作为
蓝图,利用面向对象编程方法最终实现一个系统。
三、DDD、OOA、OOD、OOP和OOT到底有什么区别和联系?
其实很简单。
带OO的是相对更传统的系统设计方法论,可简称:面向对象设计方法论;
DDD是相对来说目前更加流行的方法论,可称为:领域驱动设计方法论。
OO
OO是面向对象,这个不解释。OOA是面向对象分析,主要指将问题域的现实中对象进行分析建模;OOD
是面向对象设计,主要是将OOA的结果做进一步规范和整理、细化,便于OOP接受;OOP是面向对象编
程,用面向对象的语言来实现OOD;OOT是面向对象测试,进行以对象为中心的软件测试。
有人会将OOA+OOD和DDD做比较,有人会将OOA+OOD+OOP与DDD做比较,我这里又加上了OOT,
原因是DDD没有明确规定所属的阶段,所以与哪些阶段比较都问题不大,主要是OO方法论与DDD方法论
的比较。
拿金融领域的三户模型来举个例子。
三户模型是“客户、用户、账户”的简称。
这种思想围绕着“以客户为中心”来展开:围绕客户建立用户和账户,三者相互关联。
这是一种OOA的表达和思考方式:先有对象,面向对象建模。
向上图一样,初步细化展开的过程是OOD设计过程。
而DDD思维是怎样一个过程呢?
客户描述的是社会域,客户之间要建立联系社交、娱乐等活动;用户描述的业务域,用户要账号注册、使
用A产品、B产品;账户描述的是资金域,资金域又有账号、权限这些子域。
用OO的思想,更注重对象和属性来展开,DDD更偏重领域划分和他们之间的动态关系,同时也偏重行
为。这就是如果一个从互联网公司的一个年轻人,要和传统银行等行业的老人,技术上可能会有点难沟
通。老人可能会更偏重OO视角,年轻人更偏重DDD视角。
在工具选用上,OOD喜欢使用UML工具,用例图、类图、对象图、时序图;DDD喜欢从架构图开始。