Domain driven design 学习DDD和CQRS

Domain driven design 学习DDD和CQRS,domain-driven-design,microservices,cqrs,bounded-contexts,Domain Driven Design,Microservices,Cqrs,Bounded Contexts,我是DDD和CQRS的新手,我正计划构建一个简单的应用程序来提高我的技能。 我计划做的是一个简单的出租车公司应用程序 要求: 客户点了一辆出租车 客户一次只能有一个订单 司机点菜 驱动程序一次只能有一个订单 驱动程序转到客户端 客户进入驾驶室 课程开始了 课程结束 客户购买,司机付款 等等 我可以看到可以有三个聚合:客户机、订单和驱动程序。我想把它们分成不同的微服务。你认为这是个好主意还是我应该从一个微服务开始 我现在专注于叫出租车。首先,我需要检查客户是否还没有指定课程,然后我可以创建订单。创

我是DDD和CQRS的新手,我正计划构建一个简单的应用程序来提高我的技能。 我计划做的是一个简单的出租车公司应用程序

要求:

  • 客户点了一辆出租车
  • 客户一次只能有一个订单
  • 司机点菜
  • 驱动程序一次只能有一个订单
  • 驱动程序转到客户端
  • 客户进入驾驶室
  • 课程开始了
  • 课程结束
  • 客户购买,司机付款
  • 等等

    我可以看到可以有三个聚合:客户机、订单和驱动程序。我想把它们分成不同的微服务。你认为这是个好主意还是我应该从一个微服务开始

    我现在专注于叫出租车。首先,我需要检查客户是否还没有指定课程,然后我可以创建订单。创建订单后,我需要将其分配给客户。在一个请求期间,只能更新/创建一个聚合,我想知道如何正确地进行。我读过一些关于流程管理器的文章,我认为在这种情况下它会非常有用。我甚至画了一个沟通的模式。有人能告诉我我的方法是否正确,并给我一些如何进一步的建议吗

    你认为这是个好主意还是我应该从一个微服务开始

    我指的是约翰·加尔的智慧

    人们总是发现,一个有效的复杂系统是从一个有效的简单系统演化而来的。从零开始设计的复杂系统永远不会工作,也无法修补以使其工作。你必须重新开始,从一个简单的系统开始

    与其担心微服务,不如关注信息

    你认为这是个好主意还是我应该从一个微服务开始

    我指的是约翰·加尔的智慧

    人们总是发现,一个有效的复杂系统是从一个有效的简单系统演化而来的。从零开始设计的复杂系统永远不会工作,也无法修补以使其工作。你必须重新开始,从一个简单的系统开始

    与其担心微服务,不如把注意力放在信息上。

    有人说:“如果你的微服务比客户多,你就做错了。”

    若你们真的遵循CQRS/ES方法,那个么得到的系统比传统的ORM单体更容易分离

    因此,首先关注领域,从Monoloyth开始。

    有人说:“如果你的微服务比客户多,那你就做错了。”

    若你们真的遵循CQRS/ES方法,那个么得到的系统比传统的ORM单体更容易分离


    因此,首先关注领域,从Monoloyth开始。

    从微服务设计开始,即使以错误的方式,您也可以更好地了解所需的体系结构。因为微服务架构设计中的问题很快就会显现出来

      < li> >客户端和驱动程序都是系统的用户,有一定的共性,可以将它们视为一个域,一个微服务。
    • 考虑一个order manager微服务,通过其ID为客户机和驾驶员分配行程。订单数据库可能包括trips表,该表具有两个用于驱动程序id和客户端id的id键,以及一些用于不同状态的列。完成每次行程后,您可以将其从行程表中删除,并将其插入存档表中。另外,您可以将它留在那里,每天对表进行分区,以保持数据库的高性能

    • 考虑一个用于保存付款和交易的会计微型服务。如果您选择在其他微服务中使用NoSql数据库,这是可以的,但是在事务中使用SQL数据库

    • 您可能需要另一个用于报告和仪表板的微服务。在新数据库中镜像其他数据库以进行报告

    • 您还需要一个API网关来将请求路由到微服务或进行身份验证


    您的流程是一组事件。当然,您以后会扩展系统,可能会有一些长期运行的任务,最好有一个消息代理,并使用事件源之类的模式将您的流实现为事件/任务流。

    从微服务设计开始,即使以错误的方式,您也可以更好地了解所需的体系结构。因为微服务架构设计中的问题很快就会显现出来

      < li> >客户端和驱动程序都是系统的用户,有一定的共性,可以将它们视为一个域,一个微服务。
    • 考虑一个order manager微服务,通过其ID为客户机和驾驶员分配行程。订单数据库可能包括trips表,该表具有两个用于驱动程序id和客户端id的id键,以及一些用于不同状态的列。完成每次行程后,您可以将其从行程表中删除,并将其插入存档表中。另外,您可以将它留在那里,每天对表进行分区,以保持数据库的高性能

    • 考虑一个用于保存付款和交易的会计微型服务。如果您选择在其他微服务中使用NoSql数据库,这是可以的,但是在事务中使用SQL数据库

    • 您可能需要另一个用于报告和仪表板的微服务。在新数据库中镜像其他数据库以进行报告

    • 您还需要一个API网关来将请求路由到微服务或进行身份验证

    您的流程是一组事件。当然,稍后您将扩展系统,可能会有一些长期运行的任务,最好有一个MessageBroker,并使用事件源之类的模式将您的流实现为事件/任务流

    我可以看到可以有三个聚合:客户机、订单和驱动程序。我 希望将它们拆分为单独的微服务。你认为这是一个好主意吗 好主意,否则我应该从一个micr开始