【问题标题】:3 Tier Architecture vs 2 Tier Architecture3 层架构与 2 层架构
【发布时间】:2010-12-09 22:09:18
【问题描述】:

我们真正需要 3 层架构的例子有哪些?大多数使用 3 层架构的应用程序可以使用 2 层架构完成吗?

注意:我想看看 3 层架构的价值,我觉得现在有 3 层的大多数应用程序都可以在 2 层中完成,所以我正在寻找示例我们绝对需要 3 层,这种需要也不例外。

【问题讨论】:

  • “我正在寻找我们绝对需要 3 层的示例,而且也不例外” - 这个行业确实没有什么是明确的。实际上,有数百种方法可以解决每个问题,任何方法都有其优点。人们已经这样做了足够长的时间,以至于出现了某些方法,它们凭经验解决了比他们创造的问题更多的问题——这些方法成为行业指南/模式/最佳实践。认为在任何特定情况下,一种方法绝对正确,而另一种方法绝对错误,这是一种谬误。

标签: architecture


【解决方案1】:

我猜您的意思是分层(分离的逻辑单元)而不是分层(分离/部署的物理单元)。分层系统的一个示例是 Web 服务器(一层)提供网页(另一层),它利用来自第三层数据库的数据)。

分层架构的通常目标是分离职责。这有两个主要好处(除其他外)。

首先,您的设计将更加清晰,因为职责不会混淆,因此代码将更易于阅读、理解和维护。

其次,您可能会减少重复 - 例如在 Web 应用程序中,如果您的页面还处理业务逻辑(或恐怖数据访问)以及显示页面,那么您可以相当确定多个页面将尝试做相同或相似的事情。

您不需要需要对任何软件进行架构(例如分层,尽管还有其他方法),但对于任何除了琐碎的事情之外的任何事情,如果您不这样做,结果将是无法维护的混乱。 t.

【讨论】:

    【解决方案2】:

    对 FinnNk 的支持,但让我举一个例子,说明当你不分离你的层级时会发生什么。多年来,我一直在从事一个在出生时就严重分离的项目。所有三层——更多,如果你相信 tuinstoel 所说的话——集中到单独的 JSP 页面中。我敢肯定,这在当时看起来是一件很聪明的事情(刚开始时编码速度更快),但这种怪物已经越来越大,没有人花时间去重构。

    我们现在有 2000 多个 JSP 页面,其中散布着重复的代码。进行架构更改需要仔细回溯以确定哪些页面可能会受到影响,并对每个页面进行单独测试。管理层没有人认为花时间解决这个问题很重要——短期收益,长期损失。

    做。不是。走。这。路线。

    分层会带来更好、更快、更可测试、更模块化的代码。你会为此感谢自己,并且(更重要的是)追随你的人会为此感谢你。

    【讨论】:

      【解决方案3】:

      一些数据库向外界公开了一个休息接口,例如 NoSQL 数据库 CouchDB 和 RavenDB。这意味着在您的浏览器中运行的 Javascript 可以在没有中间层的情况下调用数据库。

      例如:http://www.infoq.com/news/2010/06/couchdb

      " 良好的 HTTP/REST 接口和 API 干净简单的两层 应用程序(在 浏览器+沙发+javascript作为服务器)”

      Oracle 内部有一个 Web 服务器,您可以使用存储过程,它也向外界公开一个休息接口。因此,浏览器中的 JavaScript 也可以在没有中间层的情况下调用 Oracle 数据库。

      当您只想从数据库中获取一些数据时,您是否总是需要中间层?我质疑这种需要。

      (TTT 以前称为 Tuinstoel)

      【讨论】:

      • 只是好奇,在这种情况下您如何处理安全问题?我很感兴趣。
      【解决方案4】:

      首先,很好的问题。正如其他人所指出的,两者都有优点。 “关注点分离”是 3 层的主要好处,它以多种方式产生红利:

      1. 安全性:通过将业务逻辑与表示分离,您可以将更严格的策略应用于各个层,例如没有数据或逻辑的演示表单可以在您的演示区域中,以便匿名用户可以访问您的“公开”内容。
      2. 可维护性/可管理性 - 关于这一点已经说了很多
      3. 重用/灾难恢复:例如,如果药房管理应用程序可能想要公开 UI 以及第三方可用于下药订单的服务。通过将业务逻辑分离到一个单独的层,您可以独立于 UI 维护服务/逻辑

      还有其他几个,但希望这些可以让您了解潜在的好处

      【讨论】:

        【解决方案5】:

        如果你有一个网站...你可能有一些 Javascript 代码,所以这是一个层次,你有你的业务逻辑在服务器上,你有数据库来存储东西。在我看来,这是三层。当然,您可以在数据库中使用存储过程并跳过业务逻辑层,因此如果您愿意,可以构建一个具有两层的网站,但如果您不想使用存储过程,您将拥有三层。

        【讨论】:

        • 业务逻辑不应驻留在存储过程或数据访问层中。我更喜欢将数据库视为一个对象——存储过程的方法和数据实体的字段。存储过程以最方便的方式处理将数据传入和传出数据库,并用于实现适合 SQL 的任务 - 例如,基于多条记录的连接更新列。
        • @ztech,是的,那又怎样..?每个人都有偏好和观点,以及“不应该”。和OP的问题有什么关系?
        • 重点是鼓励良好的设计实践。例如,如果有人问如何在 Windows 95 的根目录中放置超过 512 个文件,我的第一反应是“不要,因为这是个坏主意”。尝试在您的应用程序中整合层几乎总是一个坏主意,而且我,一方面,不想最终成为后来加入并不得不维持这种废话的人。阻止行业中的糟糕设计让我们的生活更轻松。
        • @tuinstoel 另外,有一种动物叫做“好的设计”,它不仅仅取决于个人喜好。
        • 我仍然不明白你所说的“数据库是一个对象”是什么意思,除非你认为一切都是一个对象?我谈到的是使用驻留在数据库中的 Web 服务器。那么你就不需要中间层了。这是否是一个好主意取决于您的需求。
        猜你喜欢
        • 2019-03-07
        • 2011-07-30
        • 2011-04-19
        • 2011-06-02
        • 1970-01-01
        • 2011-09-30
        • 2012-07-05
        • 2012-07-21
        • 2011-02-06
        相关资源
        最近更新 更多