Web 应用程序的 NTier 架构的替代方案

Posted

技术标签:

【中文标题】Web 应用程序的 NTier 架构的替代方案【英文标题】:Alternatives to NTier architecture for web apps 【发布时间】:2011-11-11 20:46:54 【问题描述】:

我最近与同事讨论了推动我们的 Web 应用程序采用规范的 n 层结构。令我震惊的是,我想不出任何替代方案。

是否总是需要将 Web 应用程序分层?

【问题讨论】:

【参考方案1】:

传统 N 层架构的替代方案是 Udi Dahan 所讨论的 Command-Query Responsibility Segregation (CQRS) 架构。

像所有架构决策一样,您应该真正考虑何时使用它,正如所讨论的here

就个人而言,我倾向于在我的软件旅行中看到很多"over architecture",这确实会使事情变得过于复杂,并使事情变得更加难以维护,而且显然成本也更高。您确实需要首先考虑业务问题,而不仅仅是选择架构。

让事情尽可能简单以获得最佳结果和轻松重构。

【讨论】:

【参考方案2】:

是否总是需要将 Web 应用程序分层?

您应该分离系统的不同逻辑部分,以避免它们紧密耦合,从而使它们更易于重用。将它们分开并不是那么重要。您可以将其称为 layers 或其他任何名称。

实际上这些层可能有两种含义:

    物理边界:客户端浏览器、Web 服务器、Web 服务服务器、后端数据库…… 逻辑边界:GUI、服务层、DAL、...

您还可以查看Onion Architecture。但是洋葱还是有层次的:-)

【讨论】:

标准约定是使用 tiers 作为物理边界,使用 layers 作为逻辑边界。【参考方案3】:

强烈推荐阅读Microsoft Application Architecture Guide, 2nd Edition。

然后,您会意识到分离对于每个网站(不只是 2 个左右的简单网页)来说是多么重要。

这是一本详尽的指南,解释了每一层的角色和职责,以及它们如何在一个强大且可扩展的应用程序中一起发挥作用。

您不必阅读全部内容,但首先请查看Chapter 5: Layered Application Guidelines。

【讨论】:

【参考方案4】:

分层架构有另一种“模式”。

但这是分层架构试图解决的反模式。即“大泥球”:)

【讨论】:

以上是关于Web 应用程序的 NTier 架构的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

用于 Web 开发的 MVC 架构的替代方案是啥? [复制]

Web 应用程序有啥方法可以从支持蓝牙的硬件读取实时数据?如果没有,有啥替代方案?

使 JWT(JSON Web 令牌)持续更长时间或 Flutter 应用程序的其他替代方案

JWT身份验证及其替代方案,可实现Web应用程序后端的RESTfulness

无法在Ntier结构中创建EF数据库

Google Drive API - 服务帐户存储限制 - 替代方案