Architecture 将分层应用程序转换为基于层的应用程序

Architecture 将分层应用程序转换为基于层的应用程序,architecture,Architecture,我有一个基于3层的web应用程序。我更喜欢将此应用程序部署到一台服务器上,以避免层之间的通信所涉及的开销(如果层被划分为不同的物理层) 我想知道我必须记住的架构级别上的不同设计考虑因素是什么,以便应用程序能够足够灵活,从而可以在不进行重大更改的情况下部署到不同的服务器上 例如,在VisualStudio中,我可以在一个解决方案中创建三个层。项目引用也很容易创建。但是,如果将来业务层必须部署在不同的物理服务器上呢。UI与业务层通信的不同和有效的方式有哪些。业务层和数据层之间的通信将如何进行?我的一

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

我想知道我必须记住的架构级别上的不同设计考虑因素是什么,以便应用程序能够足够灵活,从而可以在不进行重大更改的情况下部署到不同的服务器上


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

我的一般建议是:将层设计为将部署到单独的层。因此,请非常仔细地注意接口的设计,尤其是粒度。忙接口getFirstName、getFamilyName、getPhoneNumber。。。远程时将有严重的开销,首选单一方法。还可以考虑当层分开时可能发生的错误。

现在,您可以在位置Transparant API中包装对层的访问。CORBA、JavaEEEJB是实现这一点的示例,但当然您可以编写自己的facade


您实际使用的远程处理技术取决于您,我是一个JavaEE人,所以我只想使用EJB。

它应该比可能的更多。也就是说,在构建一个抽象出通信层的系统时,您将经历一些设计和实现开销。如果你不确定你将不得不将这些层分开,你可能会考虑建立你的系统来进行处理,然后承担COMM拆分后的负担。
如果您确信有一个很好的机会需要将comm抽象掉,那么可以看看下面的例子。按照指导原则设计您的系统。然后,当您在同一台机器上时,您可以使用层间绑定来提高速度,当您必须切换到新绑定时,您可以通过配置来实现。

谢谢djna。我希望这里的其他人能提供更多的信息。