我有一个基于3 Layer的Web应用程序。我更喜欢将此应用程序部署在一台服务器上,以避免层之间的通信涉及的开销,如果这些层被分成不同的物理层。
我想知道在架构级别有哪些不同的设计注意事项,我必须牢记这一点,以便应用程序可以足够灵活,以便可以在不需要大的改动的情况下部署在不同的服务器上。
例如,在Visual Studio中,我可以在一个解决方案中创建三个层。项目参考也很容易创建。但是,如果将来必须将业务层部署在不同的物理服务器上,那该怎么办呢? UI可以与业务层进行通信的不同且有效的方式有哪些。业务层和数据层之间如何进行通信?。
答案 0 :(得分:0)
我的一般建议:将图层设计为将它们部署到不同的层。因此要非常小心地注意接口的设计,尤其是粒度。繁忙的接口(getFirstName,getFamilyName,getPhoneNumber ......)在远程处理时会产生严重的开销(更喜欢单个方法.getPersonDetails)还要考虑层分离时可能发生的错误。
现在,您可以对位置Transparant API中的图层进行包装访问。 CORBA,Java EE EJB是这样做的示例,但当然您可以编写自己的外观。
你使用的实际远程处理技术取决于你,我是一个Java EE人员,所以我只是我们的EJB。
答案 1 :(得分:0)
它应该超过“可能”。也就是说,您将体验一些设计和实现开销,构建一个抽象出通信层的系统。如果您不确定是否需要拆分图层,可以考虑为In-Process构建系统,然后承担以后拆分的通信负担。
如果你确信你很有可能需要抽象通知,那么看看像WCF这样的东西。按照Service Oriented Architecture指南设计您的系统。然后,当您在同一台机器上时,可以在层之间使用single machine binding来获得速度,当您必须切换到新的绑定时,您可以通过配置来实现。