今天项目组做技术分享的时候,组内的几位大佬聊到了编程中Entity,Modle,POJO等模型的区别及作用。下班回家就查阅了一些资料,总结归纳,加深一下对编程的认识。
对于VO,DTO,DO这几个概念理解起来很简单,VO对应前端页面需要显示的数据,DO对应的是我们需要持久化到数据库中的数据对象。传统的软件架构会把一个系统应用分为表现层、业务层、持久化层等,DTO则是在各层之间传递的数据对象。
以上说的这几种模型都可以归属到实体类,对于实体类,简单来说包含两个方面的内容:属性和方法,其作用就是存储数据和执行数据本身的相关操作。我的理解是我们平时Java编程中所有定义的类都可以归为实体类,哈哈也不知道这个想法对不对。
另外在查阅相关资料的时候会牵扯到一个比较难懂的概念,就是领域模型。知乎上有看到这样一个算是相对比较好懂的解释:”领域模型“是针对特定领域里的关键事物及其关系的可视化表现,是为了准确定义需要解决问题而构造的抽象模型,是业务功能场景在软件系统里的映射转换,目的就在于为软件系统构建统一的认知。哈哈哈,可能还是比较晦涩,多看几遍吧,不懂也没关系吧,文科生才喜欢挖掘出一些让人难道的概念,让别人觉得他们研究的领域多么的高大上,而理科生嘛,就是要把复杂问题简单化,把难以理解的问题简单直白表述出来。
再来说说领域模型中的一些概念,写得比较杂。
实体:它与前面提到的面向对象的概念类似,是领域模型的基本元素。相关资料说实体应该具有唯一标识符,这一点我不是很理解。
值对象(这个概念我也不理解):他是没有唯一标识的实体,在领域模型中是可以被共享的,他们应该是不可变的,当有其他地方需要用到值对象时,可以将他的副本作为参数传递。
服务:服务是无状态的,对象是有状态的。所谓状态,就是对象的基本属性:高矮胖瘦,年轻漂亮。服务本身也是对象,但它却没有属性(只有行为),因此说是无状态的。这样不是就代表这个类是线程安全的啊?哈哈,当我瞎扯。。
软件设计所涉及的知识挺多的,可能需要在平时的编程中去积累巩固吧,以后在写代码的时候还是要多关注整体架构。