解决复杂和大规模软件的武器可以粗略的归位三种:抽象 分治和知识
微服务架构众所周知。不做赘述。我们创建一个微服务时,需要创建一个高内聚 低耦合的微服务。而DDD的限界上下文则完美匹配微服务的特点。这样就能轻松划分出一个微服务。就是DDD的上下界。
在系统复杂之后。我们都需要使用分治来拆解问题。一般有两种方式,技术维度和业务维度。技术维度类似MVC分层设计。一种就是按照业务领域来划分。
微服务架构强调用业务维度来分治应对系统复杂度。而DDD也同样着重业务视角。
在追求目标达到了统一。
我们将架构设计活动精简为以下三个层面:
以上三种活动在实际开发中是有先后顺序的。但是不一定谁先谁后。在我们解决常规套路问题时,我们很自然往分层架构套(先确定系统架构),或者用PHP开发(确定技术架构) 在业务不复杂的情况下 没啥毛病。
跳过业务架构设计出来的架构关注点不在业务响应上。可能就是个大泥球。在面临需求迭代或者响应市场变化时就会很痛苦。
DDD的核心诉求就是将业务架构映射到系统架构上,在响应业务变化调整业务架构的时候,也能随时调整系统架构。而微服务追求业务层面的复用。设计出来的系统架构和业务一致。在技术架构上则系统模块之间充分解耦。可以自由地选择合适的技术架构,去中心化地治理技术和数据
DDD与微服务关系映射
用原来的抽奖来做个简单的例子。用DDD重构完成一个中型的基于微服务架构的系统。来做到高内聚低耦合