【问题标题】:Converting Layered applications to tier based将分层应用程序转换为基于层
【发布时间】:2013-05-05 17:48:51
【问题描述】:

我有一个基于 3 层的 Web 应用程序。如果层被分离到不同的物理层,我更喜欢将这个应用程序部署在一台服务器上,以避免层之间通信所涉及的开销。

我想知道我必须牢记架构级别的不同设计注意事项,以便应用程序可以足够灵活,以便可以在不进行大更改的情况下部署在不同的服务器上。

例如在 Visual Studio 中,我可以在一个解决方案中创建三层。项目引用也很容易创建。但是,如果将来业务层必须部署在不同的物理服务器上怎么办。 UI 可以与业务层进行通信的不同且有效的方式是什么。业务层和数据层之间如何通信?

【问题讨论】:

    标签: architecture


    【解决方案1】:

    我的一般建议:设计您的层,就好像它们将被部署到不同的层一样。因此,要非常注意接口的设计,尤其是粒度。繁忙的接口(getFirstName、getFamilyName、getPhoneNumber ...)在远程时会产生严重的开销(首选单一方法。getPersonDetails)还要考虑层分离时可能发生的错误。

    现在您可以在 Location Transparant API 中封装对图层的访问。 CORBA、Java EE EJB 就是这样做的示例,当然您也可以编写自己的外观。

    您使用的实际远程处理技术取决于您,我是一名 Java EE 人员,所以我只会使用 EJB。

    【讨论】:

    • 谢谢 djna。我在这里寻找其他人的更多意见。
    【解决方案2】:

    它应该不仅仅是“也许”。也就是说,您将经历一些设计和实现开销,构建一个抽象出通信层的系统。如果您不确定是否必须拆分层,您可以考虑为 In-Process 构建系统,然后承担以后拆分的通信负担。

    如果您确信很有可能需要抽象掉 comm,请查看 WCF 之类的内容。按照Service Oriented Architecture 指南设计您的系统。然后当你在同一台机器上时,你可以在层之间使用single machine binding来提高速度,当你必须切换到新的绑定时,你可以通过配置来实现。

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2012-04-28
      • 2018-08-20
      • 1970-01-01
      相关资源
      最近更新 更多