在我尝试回答之前,让我澄清一下:企业应用程序中存在三个不同的东西 - Facade、Service Layer和Remote Facade。
外观- 在包装子系统时,仍然是一个对象,并且 UI (MVC) 应用程序通常存在于同一个进程中。因此,通信以通常的 OO 方式完成:调用方法、读取属性、监听事件。
服务层- 当业务逻辑层变得成熟且过于复杂以至于 MVC 无法直接与其交互时,则将服务层置于它们之间。服务层是 MVC 用作业务逻辑包装器的 API。它不是远程的,也不需要使用 DTO,因为通信中不涉及电线。
Remote Facade -(简单来说,任何远程服务)这是 Facade 和服务层的混合体。当您想要在系统上公开某种包装器(我们称之为 Facade)作为分布边界时,远程 Facade 就开始存在。原因之一可能是允许多个 UI (MVC) 应用程序使用相同的远程外观。
-
比较:
外观与服务层:它们是相似的,因为它们都包装了子系统。不同之处在于服务层更面向 UI (MVC) 应用程序需求,并公开功能以简化业务逻辑的使用。另一方面,Facade 正在公开功能以简化业务逻辑,但不一定简化与 UI (MVC) 应用程序的通信。
Facade vs. Remote Facade(服务?):绝对不同,因为 Remote Facade 必须使用 DTO 作为通信消息。如果您仍想将 Remote Facade 用作常规对象(属性、事件),则远程 Facade 将需要某种代理;但是代理无论如何都会对真实对象使用 DTO,即远程外观。
-
可能的流量:
controller-facade-dao
- 值得怀疑,但仍有可能。Facade 通常不用于包装 DAL。除了作为子系统之外,应该还有一些更成熟的东西。但是,如果外观是业务逻辑的一部分,那么是的,这是可能的。仍然必须更加强调子系统。对我来说,DAL 包装不足以称之为 Facade。
controller-service-dao
- 绝对有可能。许多远程服务通过 DAL 直接使用数据库。
controller-facade-service-dao
- 也许,如果您将服务视为子系统。
我会再添加一个有意义的:
controller-service [layer]-facade (part of business)-subsystem (e.g. accounting, business on its own)-dao
- 我相信你可以翻译这个。
-
请记住,服务(或远程外观)可以存在于流程中的任何位置。这只是由您的分发需求决定的。