- 新技术 。当数据库表数据量达到“亿”级出现明显的性能瓶颈时,可以应用 分库分表 或 TiDB 来解决
- 新方案 。当数据库读压力巨大 , 可以调整技术方案,使用数据库读写分离、增加缓存等方案解决
- 技术调整不影响业务模型
- 业务调整不能依赖技术
2. 六边形架构六边形架构出自《实现领域驱动设计》一书,与“洋葱架构” 非常相似 , 都能很好的实现 “业务” 与 “技术” 的分离 。
在 “Command侧”(详见CQRS架构) DDD 仍旧是最佳解决方案,所以在此使用 “六边形架构” 作为顶级架构 。
六边形架构如下:
文章插图
image
该架构由内外两个六边形组成,这也是其名称来源:
- 内六边形属于业务域 , 用于应对业务复杂性 。
- 外六边形属于技术域 , 用于应对技术复杂性 。
- 其中内六边形是整个系统的核心,外六边形依赖于内六边形,而内六边形不依赖于外六边形
- 内外两个六边形存在清晰的边界 , 两者相互独立,互不影响,独自演进
2.1.1. DDD
DDD 是解决复杂业务的一把利器,将业务需求和代码实现相结合,通过对业务领域的深入理解,构建出可复用、可维护、可扩展的领域模型 。DDD 分为战略和战术两部分,在此重点阐述战术部分 。战术模型主要包括:
- 实体(Entity):具有唯一标识的领域对象,具有丰富的属性和行为 , 表示需要持续跟踪的领域概念,比如 用户、订单、地址等;
- 值对象(Value Object):没有唯一标识的领域对象,具有属性和行为 , 一般用于表示某一个领域概念,比如 金额、邮箱、手机号等;
- 聚合根(Aggregate Root):一组由实体和值对象组成的高内聚对象集合,由一个根实体来管理它们,我们也称之为聚合根,比如 订单+订单项便组成了一个聚合 , 其中订单为聚合根;
- 工厂(Factory):创建领域对象的一种机制,也是设计模式在 DDD 中的落地,它隐藏了对象创建细节 , 并保障创建对象的有效性,主要解决复杂对象初始化问题;
- 存储库(Repository):提供对领域对象的持久化和检索功能,将领域对象从数据存储细节中分离出来,完成领域对象和存储引擎的解耦;
- 领域服务(Service):处理领域对象之间的交互,没有自己的状态,封装了一些业务逻辑,主要用于需要多个领域对象相互协作才能完成的业务场景,比如银行转账;
- 领域事件(Event):指在领域内发生的、有意义的、需要被捕捉的事件,主要完成服务内的流程解耦和服务间的系统解耦;
2.1.2. TDD
也称为测试驱动开发,它的基本思想是在编写代码之前先编写测试,然后根据测试来编写代码,最后再运行测试 。可以帮助开发人员更快地发现并修复代码中的bug , 还可以让开发人员更加关注代码的设计,使代码更加健壮、可扩展和易维护 。业务模型与基础设施的解耦将为你的 TDD 带来众多好处:
- 提高测试的速度:使用 Mock 技术可以避免测试过程中涉及到缓慢的网络或数据库操作,从而提高测试速度,加快迭代周期;
- 提高测试可靠性:使用 Mock数据可以降低测试失败或不可靠的情况,避免由于数据变更所造成的测试不稳定问题;
推荐阅读
- 平面设计必备的三大软件设计教程
- 听说你会架构设计?来,弄一个群聊系统
- 一文读懂Android架构演进历程
- Instagram 早期技术架构,你了解了吗?
- 登雪山装备哪些是必备的 登雪山怎么选购装备
- 五一出行物品清单 五一出行必备装备
- 护发精油哪个牌子用了改善毛躁?以下6款好产品“毛孩子”必备!
- Python编程必备:掌握列表遍历的六种神级技巧!
- 自驾游必备100个清单 自驾游注意事项和准备工作
- 听说你会架构设计?来,弄一个微信群聊系统