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 应用程序的其他替代方案