Monolith 和 n Layer 有什么区别?
What is the difference between Monolith and n Layer?
我有几个关于单体和n层架构的问题。
首先,Monolith和n层架构有什么区别?
其次,假设我有一个包含多个项目的 Visual Studio 解决方案,例如:
- 表示层
- 服务层
- 业务层
- 跨层
- 数据层
- 单元测试
这是单体架构还是 n 层架构?
如果我有包含(比方说)3 Web API 的微服务,并且我在单独的 Visual Studio 解决方案中构建每个服务, 没问题实现我之前的项目结构(服务层、业务层、数据层等)?
非常感谢,抱歉我的英语不好。
好的,所以 Monolith
解决方案基本上是在一个解决方案中包含一个项目的旧方法,其中包含 所有 代码。
假设您正在做一个网站。
这意味着您将使用单个项目创建单个解决方案,所有数据库调用(持久性)、逻辑(业务 logic/services)以及最终弄清楚如何显示计算数据(演示)都是在那个单一项目中以混乱的方式混入。有时人们试图将关注点拆分到文件夹中,但通常是一团糟。这使得应用程序的 support/maintenance 成为一场噩梦。如果您希望对 website/application、 进行单个更改,整个应用程序将变为 offline/restart。
对
n-tier / n-layered
solutions/applications。这是我们在一个解决方案中(通常)有多个项目的地方,它将我们的应用程序的关注点分离成更小的组件。这使我们能够将问题 space 保留在一个区域,从而更容易维护和支持。这也使得您的各种 components/projects/dll 更容易 重用 到应用程序的各种 other 子系统中。它比旧的单体架构模式要好得多。但是,如果您希望对 website/application 进行单个更改, 整个应用程序将保持 offline/restart。
最后,我们有 microservices
。这是一个更现代的概念,并随着 monolith -> n tier -> microservices
的发展而继续。这是当我们将应用程序关注点拆分为单个应用程序时,这样当需要更新一个微服务时,整个应用程序 就不会停止。当然,依赖于微服务的应用程序的 部分 可能会 stop/be 受到影响,但 整个 应用程序可能会受到影响没有。
让我们举个例子:
我有一个销售宠物的网站 (cats/dogs/etc)。
我可能会将这个网站拆分成单独的微服务迷你网站:
- 身份验证
- administration/backend 管理(想想:只有管理员才能看到的东西)
- public 网站
- 动物库存
- 购物车
因此,其中每一个都是一个网站,就像 n 层架构的应用程序一样。所以它会有一个表示层(MVC 网站)。一些数据库项目和一些基本服务。
现在 4 个微服务(迷你网站)都这样做了。
现在,您需要更新网站管理部分的一些内容。你把它脱机,主网站保持运行。人们仍然可以浏览和购买动物。
所以是的,如果您的应用程序足够大以至于它有您可能想要细分的区域,那么实施微服务是一件好事。它确实增加了一些复杂性,但也带来了它自己的优势。
是的,如果您的应用程序 不是一些愚蠢的 hello-world 应用程序或某些研究项目,您的微服务应该遵循 n 层模式。
您问题的简短回答是 -
技术堆栈的水平分区(n 层架构)
对比
技术栈纵向划分(微服务)
我有几个关于单体和n层架构的问题。
首先,Monolith和n层架构有什么区别?
其次,假设我有一个包含多个项目的 Visual Studio 解决方案,例如:
- 表示层
- 服务层
- 业务层
- 跨层
- 数据层
- 单元测试
这是单体架构还是 n 层架构?
如果我有包含(比方说)3 Web API 的微服务,并且我在单独的 Visual Studio 解决方案中构建每个服务, 没问题实现我之前的项目结构(服务层、业务层、数据层等)?
非常感谢,抱歉我的英语不好。
好的,所以 Monolith
解决方案基本上是在一个解决方案中包含一个项目的旧方法,其中包含 所有 代码。
假设您正在做一个网站。
这意味着您将使用单个项目创建单个解决方案,所有数据库调用(持久性)、逻辑(业务 logic/services)以及最终弄清楚如何显示计算数据(演示)都是在那个单一项目中以混乱的方式混入。有时人们试图将关注点拆分到文件夹中,但通常是一团糟。这使得应用程序的 support/maintenance 成为一场噩梦。如果您希望对 website/application、 进行单个更改,整个应用程序将变为 offline/restart。
对
n-tier / n-layered
solutions/applications。这是我们在一个解决方案中(通常)有多个项目的地方,它将我们的应用程序的关注点分离成更小的组件。这使我们能够将问题 space 保留在一个区域,从而更容易维护和支持。这也使得您的各种 components/projects/dll 更容易 重用 到应用程序的各种 other 子系统中。它比旧的单体架构模式要好得多。但是,如果您希望对 website/application 进行单个更改, 整个应用程序将保持 offline/restart。
最后,我们有 microservices
。这是一个更现代的概念,并随着 monolith -> n tier -> microservices
的发展而继续。这是当我们将应用程序关注点拆分为单个应用程序时,这样当需要更新一个微服务时,整个应用程序 就不会停止。当然,依赖于微服务的应用程序的 部分 可能会 stop/be 受到影响,但 整个 应用程序可能会受到影响没有。
让我们举个例子:
我有一个销售宠物的网站 (cats/dogs/etc)。 我可能会将这个网站拆分成单独的微服务迷你网站:
- 身份验证
- administration/backend 管理(想想:只有管理员才能看到的东西)
- public 网站
- 动物库存
- 购物车
因此,其中每一个都是一个网站,就像 n 层架构的应用程序一样。所以它会有一个表示层(MVC 网站)。一些数据库项目和一些基本服务。
现在 4 个微服务(迷你网站)都这样做了。
现在,您需要更新网站管理部分的一些内容。你把它脱机,主网站保持运行。人们仍然可以浏览和购买动物。
所以是的,如果您的应用程序足够大以至于它有您可能想要细分的区域,那么实施微服务是一件好事。它确实增加了一些复杂性,但也带来了它自己的优势。
是的,如果您的应用程序 不是一些愚蠢的 hello-world 应用程序或某些研究项目,您的微服务应该遵循 n 层模式。
您问题的简短回答是 - 技术堆栈的水平分区(n 层架构) 对比 技术栈纵向划分(微服务)