在决定使用 DDD 将我们的整体 Web 应用程序拆分为单独的 Web 应用程序时,我应该考虑什么?

What should I consider when deciding to split our monolithic web application into separate web apps using DDD?

背景

我们使用 Microsoft (.NET) 技术堆栈。

我们目前有一个大型单体网络应用程序。我们正在计划如何实现领域驱动设计。
我们计划在一些有界上下文中实施微服务,但不是全部。因为它是一个整体, 大多数有界上下文将存在于同一个数据库中,因此我们必须确保我们控制访问 代码级别。

this SO post开始,有两种实现限界上下文的方法。

<bc 1>
 |_ domain
 |_ application
 |_ presentation
 |_ infrastructure
<bc 2>
 |_ domain
 |_ application
 |_ presentation
 |_ infrastructure

或以下内容:

domain
 |_ <bc 1>
 |_ <bc 2>
application
presentation
infrastructure

我们对第一种方法感兴趣。因为它看起来很适合我们的情况。

我的问题是,在决定是否应该通过有界连接将单个 Web 应用程序拆分为单独的应用程序时,我们应该考虑什么。考虑时有哪些缺点和问题这种方法?

我们的应用程序有几个(为简洁起见)主要领域:

Products
Client Administration
System Administration

当用户在特定区域时,he/she 通常需要很少的关于其他区域的信息。

欢迎所有想法和建议。我们正在努力获得尽可能多的理解。

微服务的基本基础之一是 independent deployability,所以我肯定会选择方法 1。

现在在那种情况下,微服务的 "Presentation layer" 不会像前端 UI 那样远,它通常只是一个 REST API。有几种方法可以设计使用微服务的前端,但如果 ProductClientSystem 前端具有不同的生命周期,我建议为它们使用单​​独的 Web 应用程序。

关于该主题的有用文章: http://blog.xebia.com/the-monolithic-frontend-in-the-microservices-architecture/ http://samnewman.io/patterns/architectural/bff/#bff