帝国网站数据库配置文件,企业网站有哪些内容,西安短视频拍摄制作公司,企业网站建设的一般要素包括什么欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章#xff0c;主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等#xff0c;同时欢迎大家加我微信「java_front」一起交流学习 1 分层疑问
无论DDD还是MVC模式构建项目#xff0c;势必涉及到工程结构的分层主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等同时欢迎大家加我微信「java_front」一起交流学习 1 分层疑问
无论DDD还是MVC模式构建项目势必涉及到工程结构的分层每一层由于定位不同所以访问的对象也不同那么对象在每一层传递时就会涉及到对象的转换这时有人会产生以下疑问
对象种类多增加理解成本对象之间转换增加代码成本编写代码时有时不同层对象几乎一样
即使有这样的疑问我也认为分层是必要的所以本文我们尝试回答上述疑问。 2 通用分层模型
两种通用模型是MVC和DDD我之前在文章《DDD理论建模与实现全流程》也详细讨论DDD建模和落地全流程本文只涉及对象的讨论所以会对模型有所简化。 2.1 模型分类
数据对象DOdata object业务对象BObusiness object视图对象VOview object数据传输对象DTOdata transfer object领域对象DMOdomain object聚合对象AGGaggregation 2.2 MVC
MVC模型总体分为三层
持久层persistence业务层business表现层presentation/client
每一层使用对象
持久层 输入对象DO输出对象DO 业务层 输入对象BO输出对象BO 表现层 输入对象VO/DTO输出对象VO/DTO 2.3 DDD
DDD模型总体分为四层
基础设施层infrastructure领域层domain应用层application外部访问层presentation/client
每一层使用对象
基础设施层 输入对象DO输出对象DO 领域层 输入对象DMO输出对象DMO 应用层 输入对象AGG输出对象DTO 外部访问层 输入对象VO/DTO输出对象VO/DTO 3 生活实例
这些对象看起来比较复杂理解成本很高好像是为了分层硬造出来的概念。其实不然这些对象在生活中司空见惯只不过大家并没有觉察。我们设想有一家三口小明、小明爸爸和小明妈妈看看这些对象是怎么应用在生活中的。 3.1 MVC
3.1.1 数据对象DO
数据对象作用是直接持久化至数据库是最本质的一种对象这就像小明在卧室中穿着背心睡觉这接近于人最本质的一种状态小明此时是一种数据对象。 3.1.2 业务对象BO
小明起床走出卧室这时小明就不仅仅是他自己了他还多了很多身份例如儿子、学生、足球队队员不同身份输入和输出信息是不一样的。作为儿子要回应家长的要求作为学生要回应老师的要求作为足球队员要回应教练的要求。小明从数据对象在不同的身份场景中变成了不同的业务对象。 3.1.3 视图对象/数据传输对象VO/DTO
小明吃完早饭准备去上学但是嘴角粘上了饭粒出门前要把饭粒擦掉。数据传输对象需要注意简洁性和安全新最重要的是只携带必要信息而不应该携带不必须要信息所以此时小明变成了视图对象。 3.2 DDD
3.2.1 领域对象DMO
领域对象要做到领域完备从本质上来说与业务对象相同但是通常使用充血模型业务对象通常使用贫血模型。 3.2.2 聚合对象AGG
学校要开家长会要求小明、小明妈妈和小明爸爸全部参加其中小明负责大扫除小明妈妈负责出黑板报小明爸爸负责教小朋友们踢足球。此时学校和家长联系时是以家庭为单位的家庭就是聚合对象。 4 一体多面
通过上述实例我们看到即使是同一个自然人在不同的场景下也有不同的身份不同的身份对他的要求是不同的输入和输出也是不同的。这就是一体多面。
同理对于同一个对象即使其在数据库只有一条数据但是由于场景的不同输入和输出也是不同的所以有了各种看似复杂的对象。我们再回看上面三个问题可以尝试给出本文的答案
对象种类多增加理解成本这是必须要付出的成本小明不能嘴角挂着饭粒去上学
对象之间转换增加代码成本这是必须要付出的成本不同角色切换时必须要付出切换成本小明不能用回应足球队教练的输出回应老师或者老师这是截然不同的角色
编写代码时有时不同层对象属性几乎一样小明作为一个自然人他自身固有特性也是相同的所以表现在对象上是很多属性是一致的。但是不同的角色是有不同要求的所以为了一些细微的差别也是要新增对象的这是必要的代价 欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等同时欢迎大家加我微信「java_front」一起交流学习