3层架构与2层架构

时间:2009-10-25 15:40:53

标签: architecture

我们真正需要3层架构的例子是什么?使用3层体系结构的大多数应用程序是否可以使用2层体系结构完成?

注意:我试图看到3层架构的价值,我觉得现在有3层的大部分应用都可以在2层完成,所以我在寻找示例我们绝对需要3层,这个需求也不例外。

6 个答案:

答案 0 :(得分:6)

我猜你的意思是分层(逻辑分离单元)而不是分层(分离/部署的物理单元)。分层系统的一个示例是提供网页(另一层)的Web服务器(1层),该网页从第3层的数据库中获取数据。

分层架构的通常目标是分离责任。这有两个主要好处(其中包括)。

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

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

你没有需要来架构(例如分层,尽管有其他方式)任何软件,但除了琐碎的事情之外,如果你不做,结果将是一个难以维护的混乱吨。

答案 1 :(得分:3)

支持FinnNk,但是让我举一个例子,说明当你不分层时会发生什么。多年以来,我一直在研究一个在出生时严重分离的项目。所有这三个层次 - 如果您相信tuinstoel所说的话 - 更多的是集中在各个JSP页面中。我确信它在当时看起来很聪明(当你刚刚开始时编码速度更快)但是这种怪物已经成长并且没有人花时间重构。

我们现在拥有2000多个JSP页面,其中包含重复的代码。进行模式更改需要仔细回溯以确定可能影响的页面,以及对每个页面的单独测试。管理层中没有人认为花时间来解决这个问题非常重要 - 短期收益,长期亏损。

执行。不。走。这个。路由。

分离层可以产生更好,更快,更可测试,更模块化的代码。你会感谢自己,而且(更重要的是)那些追随你的人会感谢你。

答案 2 :(得分:2)

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

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

  

“表现良好的HTTP / REST接口和   API清洁简单的两层   应用程序(html + javascript中的   浏览器+沙发+ javascript作为服务器)“

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

当你想要的只是从数据库获取一些数据时,总是是否需要中间层?我怀疑这个需要。

(TTT以前称为Tuinstoel)

答案 3 :(得分:0)

有些案例可能会让您从2层变为3层: 1-您的系统有不同类型的客户端(桌面,Web,移动等) 2-您的系统具有异构类型的数据源(例如,非DB资源)
3-您的系统需要特定的客户端/服务器通信协议 4-您希望隐藏和保护来自客户端的数据层 5-您需要通过服务器群集和负载平衡来实现可扩展性 6-您需要对客户端透明的服务器到服务器集成 7-您希望将共享资源用于多个客户端(例如数据库连接) 8-您希望通过将客户端与数据库服务器或服务器组分离来简化系统维护 9-您希望将业务逻辑放在特定平台上的单独层中 10-您希望减少客户端和数据库之间的流量

答案 4 :(得分:0)

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

  1. 安全性:通过将业务逻辑与表示分离,您可以对各个层应用更严格的策略,例如没有数据或逻辑的演示文稿表格可以在您的演示文稿区域中,因此匿名用户可以访问您的“公开”内容。
  2. 可维护性/可管理性 - 关于此
  3. 已经说了很多
  4. 重用/灾难恢复:对于instace,如果一个pharamcy管理应用程序可能想要公开UI以及第三方可以用来下订单处方的服务。通过将业务逻辑分离到单独的层,您可以独立于UI维护服务/逻辑
  5. 还有其他几个,但这些希望能够给出潜在好处的概念

答案 5 :(得分:-1)

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