架构是产品和系统设计中的核心概念,它关乎如何将不同组件有序地组合起来,以实现更好的功能表现、迭代和维护。架构的演进和代码的重构是产品和系统发展中不可或缺的过程。 在技术领域,我们经常遇到中台、平台、系统和应用等术语,它们各自承担着不同的角色和功能。以下是它们之间的关系和特点:

  1. 应用:作为最小的功能单元,应用专注于实现具体的业务功能。在微服务架构中,一个业务系统可能包含多个应用,例如Web应用和Service应用。
  2. 系统:指的是一个完整的业务系统,通常代表一个商业产品。例如,寻源系统或招投标系统。
  3. 平台:由多个业务系统构成,提供比单一业务系统更丰富的功能。平台通常针对特定领域提供完整的商业能力,如采购平台,它可能包括寻源、招投标等子系统。平台强调功能复用,但通常只服务于特定的场景。
  4. 中台:在平台的基础上进一步发展,通过扩展点支持多种场景,实现业务的复用。例如,采购中台不仅服务于大企业,还能适应中小企业甚至个人采购的需求。 架构的设计和实施是一个动态的过程,需要不断地评估和调整以适应不断变化的业务需求和技术环境。

架构设计概述

在软件开发中,架构设计是确保系统可维护性、扩展性和稳定性的关键。本文将重点探讨应用架构,特别是领域驱动设计(Domain-Driven Design, DDD)在应用架构中的应用。

一、架构层次与关注点

1. 平台架构- 职责:关注于系统的部署方式和新技术的应用,例如云计算和微服务架构。

2. 业务系统架构- 职责:侧重于职责边界的划分,确保系统各部分的清晰分工。

3. 应用架构- 职责:专注于应用本身的设计,包括分层架构和DDD等设计模式。

二、职责边界划分

系统边界的合理划分对于业务架构至关重要。基本原则是按照职责进行划分,当职责不明确时,可以通过中介领域进行分配。通过用例分析,可以发现同领域模型间的交互频繁,而跨域模型间的交互较少。如果出现频繁的跨域交互,可能意味着领域职责划分存在问题。

三、领域驱动设计(DDD)

1. DDD介绍- 定义:DDD是一种设计思想,强调面向领域和模型的设计,而非仅仅面向技术和数据。- 目的:通过与业务专家的深入交流,不断迭代系统设计,以更好地反映领域知识。

2. 领域模型的重要性- 设计原则:领域模型应为技术和业务专家所理解,它不仅是领域概念的抽象,也应指导软件开发实现。

3. 领域核心构件- 实体:在业务中独立存在且具有唯一性的业务对象。- 值对象:只关注内容,不关心唯一性的对象,通常作为实体的属性存在。- 领域服务:处理不属于任何实体或值对象的特殊操作。- 聚合:以某个实体为根,聚合其他值对象作为属性的集合。- 工厂:负责创建和重建领域对象。- Repository:负责领域对象与存储之间的数据转换。

四、DDD应用架构分层最佳实践

1. 分层架构- 原则:保持每一层的职责单一,确保层与层之间的低耦合。

2. 应用架构分层- 实现:根据DDD原则,将应用分为多个层次,每层关注不同的职责。

3. 设计与实现的绑定- 重要性:设计与实现应紧密结合,以确保系统实现能够反映领域设计意图。

结语

通过DDD的应用架构设计,可以更好地理解和应对业务复杂性,构建出既符合业务需求又易于维护和扩展的软件系统。

2)商业能力

通过不同领域能力(可能跨组织、跨部门)的组装,可以合成一定的商业能力,通过配置+定制快速接入,加快业务迭代速速

领域驱动设计原则解析

1. 领域层概念使用领域层应使用专业术语来表达业务逻辑,确保核心逻辑基于领域构件实现。避免依赖外部实现,不对外暴露无关接口,保护领域层的独立性。

2. Repository层事务控制Repository层通常不参与事务控制,保持其职责的单一性。

3. 领域模型与SOLID原则持续关注领域模型的设计与职责,遵循面向对象设计的SOLID原则,避免将领域对象简化为数据容器。

4. 聚合根的使用通过聚合根来遍历数据库,查找关联的值对象。如果需要直接遍历值对象,应反思模型设计是否合理,考虑值对象是否应设计为实体。

5. 设计的低耦合与高内聚整个设计应追求低耦合、高内聚,包括包的组织与划分。

6. 复杂性管理软件设计应有效管理复杂性,将复杂设计用于必要之处。领域建模从简化关联关系开始,降低模型间的复杂度,简化关联关系,提高数据一致性和系统稳定性。

7. 关联关系的简化模型之间的关联应尽可能简化,避免不必要的复杂性。例如,优先考虑1对多而非多对多,1对1而非1对多,单向关联而非双向关联。适当简化关联关系,体现对领域知识的深入理解。

8. 数据存储结构设计根据实体和值对象的需求设计数据存储结构。1对1的领域模型信息通常存储在一张表中,1对多的数据则需分散存储。数据库设计应注重查询更新效率和数据完整性的保障。

9. 聚合内对象的访问除了通过聚合根访问聚合内的关联对象外,不允许通过其他方式访问。这有助于维护数据的一致性和封装性。

以上原则为领域驱动设计的核心思想,指导我们在软件设计中实现高内聚、低耦合的系统架构。