在不同的服务器/层上分离业务和表示逻辑

时间:2013-10-03 09:18:09

标签: design-patterns architecture n-tier-architecture separation-of-concerns

我被迫使用托管公司,这迫使我将我的(网络)表示逻辑和我的业务逻辑分隔在两个不同的服务器/层上,由防火墙隔开。只有具有演示逻辑的服务器才会暴露给互联网。理由是安全。我有第三个服务器/层与数据库,但这是微不足道的。我正在寻找在这种情况下有用的架构模型/设计模式。

我在三层网络架构上找到了Microsoft的描述:Improving Web Application Security: Threats and Countermeasures,但它是关于做什么,而不是如何来做。 Microsoft自己的托管使用双层架构:Windows Azure Security Guidance

EG。如果我使用MVC模式,我可以将Controller和View放在表示逻辑服务器上,将Model放在业务逻辑服务器上。然后我可以在每个服务器上放置一个服务层进行通信,但我必须在服务器之间共享会话,用户身份验证等。

这样做的聪明方法是什么? 任何人都可以给我一篇文章的链接等吗?

1 个答案:

答案 0 :(得分:1)

会话状态应与域状态正交。您很可能希望在视图层中保持会话状态,并尽可能保持服务/域层无状态。这意味着您需要从控制器将任何用户信息传递到服务层。

如果这成为问题,并且您需要长时间运行的会话状态,请将其外部化到单独的存储,并将其链接到传入的会话信息。这使域层的“会话”与视图层中的“会话”分开。从而保留了模型和视图之间的抽象。

开始招致业务逻辑流入视图/控制器层,因为会话状态更方便。要注意它,并努力控制它。

MVVM模式可能比MVC更接近,并且它在业务服务器端封装视图状态方面做得更好。但是会议仍然存在问题。您将需要/想要在视图/业务层上单独的会话,但视图层上的会话最终会非常轻松。它基本上只需要处理身份验证,然后有一个密钥(sessionid),它可以传递给服务层,以允许viewmodel链接。