现在我怎么设计系统

下面是几种常见的系统设计。它们都不是万能的,大多数时候你用不上(YAGNI)。

Event-driven architecture

  1. 下单服务

    不知道谁在听

  2. 事件总线

    • 库存
    • 账单
    • 通知
适合
一件事要触发很多互相独立的后续动作
多半用不上
流程只有一两步,直接调用就够

Domain-driven design

  • 销售

    Customer

    正在谈的客户

  • 翻译层
  • 账单

    Customer

    付钱的账户

  • 翻译层
  • 客服

    Customer

    提工单的人

适合
业务复杂,不同团队对同一概念的理解不同
多半用不上
基本只是增删改查

Explicit architecture

Adapters

  • UI
  • 数据库
  • 第三方

Application

Domain

依赖都指向中心。这个说法来自 Herberto Graça。

适合
业务规则要用很久,外部依赖可能会换
多半用不上
项目小,或者不会长期维护

Distributed system

  1. 客户端

  2. 负载均衡

    • 服务副本
    • 服务副本
    • 服务副本

      网络断了

  3. 数据

    多份副本

适合
一台机器真的撑不住,或者必须跨地域
多半用不上
一台机器还撑得住

一个应用,一个数据库

  1. 应用

  2. 数据库

适合
大多数情况

哪种系统最适合你,必须由 domain expert 和我这样有经验的 system designer 一起决定。