领域驱动设计及分层

•需求:软件的价值-领域部分,和技术无关
•设计:减少成本
•领域建模:贯通需求和设计,突出领域模型,让领域的复杂度和代码的复杂度相匹配
•抽象:并不是象现实世界,而是对现实世界中根据我们要解决的问题进行的抽象建模,比如房子根据我们关注点不同可以抽象成门窗户等构成,但也可以抽象成水泥,钢筋等构成的。
界面层
应用逻辑层
领域层(实体,值对象,服务)
基础设施层

是允许再加层的,比如要向其它系统提供远程服务。可以在应用逻辑上层,加入一个门面或外观,然后再加一层WebService层。如果改天改用ICE直接再在外观上层加个ICE层就好。

领域逻辑的实现:

比如我们的公司,我们每个人是个实体,我们不仅仅有属性,更重要的我们还是在做事情的,比如编码。所以实体一个很大的功能就是要有服务,但有些服务需要几个实体协作来完成,这时放在哪个实体里都水太合适,这时就做成服务。

基础设施层的repository:可以理解为如果我们到银行办个业务,就要有相应的业务实体来为我们服务,repository就是为我们寻找服务实体的导航员。但记住我们只能找到聚合的根,比如我要借一个人的钱,那我不能直接和他的钱打叫道,要先给钱的主人(聚合根)打交道。

领域逻辑的实现方法:按Martin Folwler的分法,分为事务脚本,表模块和领域模型。

 

大家用的比较多的其它分层

Action
Service
Dao
Model

 

评:应该是最常用的一个了,很方便时行项目管理。一般model层会做成vo(值对象),业务全由服务层来做。还有一个小变种,就是把service再划分为应用服务和领域服务。

       还有一种情况是为事务再加入一层,现在都是声明式事务了,可以做到业务逻辑和具体的数据库代码解耦,已经不再需要。

 

 

 

### 领域驱动设计 (DDD) 中的分层架构及其应用 领域驱动设计(DDD)中的分层架构是一种用于构建复杂系统的结构化方法,它通过将系统划分为多个逻辑层来提高模块化程度并降低耦合度。以下是关于 DDD 分层架构的核心内容: #### 基本概念 DDD 的分层架构通常基于传统的三层架构扩展而来,即表示层、应用层和服务层[^3]。然而,在引入 DDD 后,这些层被赋予了更具体的职责和意义。 - **表示层**:负责处理用户界面交互,接收外部请求并将结果返回给客户端。 - **应用层**:作为协调者,定义应用程序的行为而不涉及任何业务规则。它是连接高层接口与底层实现的关键部分。 - **领域层**:这是整个架构的核心所在,包含了所有的业务逻辑和领域模型。此层专注于表达业务语义并通过统一的语言描述复杂的业务场景[^1]。 - **基础设施层**:提供技术支持功能,比如数据持久化、消息队列通信等基础服务支持工作。 这种划分方式不仅有助于保持代码库内部的高度一致性,还能够促进跨团队之间的协作效率提升[^5]。 #### 层级间的关系及依赖方向 在遵循单一责任原则的基础上,各层之间存在明确的方向性关系——高层次应尽量减少对低层次的具体依赖,从而形成一种自顶向下式的调用链路[^4]。具体来说: - 表示层可以访问应用层; - 应用层则既可以操作领域层也可以利用基础设施所提供的资源完成某些特定任务; - 而领域层本身并不直接与其他两方发生联系,仅需关注自身的功能性完善即可;至于最后一点,则由专门负责支撑作用的基础设施承担起桥梁搭建的任务。 #### 微服务环境下的适应性调整 随着云计算技术和容器编排平台的发展壮大,“单体巨石型”应用逐渐让位于更加灵活敏捷的小规模单元组合而成的整体解决方案—这就是所谓的“微服务体系”。在这种新型部署形态下,采用以 DDD 思想指导下的分层设计理念显得尤为重要因为它可以帮助开发者更好地界定各个独立组件间的界限范围,并确保它们能够在必要时刻相互配合却又互不干扰正常运转状态之中持续运作下去[^3]。 此外值得注意的一点在于,尽管传统意义上的严格分层可能会带来一定性能损耗或者增加额外维护成本等问题出现,但在现代软件工程实践中往往倾向于采取更为宽松的形式来进行权衡取舍以便达到最优效果平衡点位置之上[^4]。 --- ```python class ApplicationService: def __init__(self, repository): self.repository = repository def process_business_logic(self, input_data): entity = self.repository.find_by_id(input_data['id']) result = entity.apply_business_rule(input_data['value']) # Domain logic invocation return {"status": "success", "result": result} class Repository: def find_by_id(self, id_): pass # Implementation details omitted for brevity class Entity: def apply_business_rule(self, value): pass # Business rule implementation here ``` 以上是一个简单的 Python 示例展示了如何在一个典型的应用程序中组织不同层面的对象实例以及它们彼此之间可能存在的互动情况。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值