在我试图回答之前,让我澄清一些事情:企业应用程序中有三个不同的东西 -
Facade、
Service Layer和
Remote Facade。
Facade - 尽管包装了子系统,但仍然是一个对象,并且UI(MVC)应用程序通常位于同一进程中。因此,通信以通常的OO方式进行:调用方法、读取属性、监听事件。
Service Layer - 当业务逻辑层变得成熟并且对MVC直接交互过于复杂时,就会在它们之间放置Service Layer。Service Layer是MVC用作业务逻辑的包装器的API。它不是远程的,也不需要使用DTO,因为通信中没有涉及到任何线路。
Remote Facade - (简单地说,任何远程服务)这是Facade和Service Layer的混合体。当您想要公开某种系统的包装器(我们称之为Facade)作为分布边界时,Remote Facade开始存在。其中一个原因可能是允许几个UI(MVC)应用程序使用相同的Remote Facade。
比较:
Facade vs.
Service Layer: 它们很相似,因为它们都包装子系统。区别在于Service Layer更加面向UI(MVC)应用程序的需求,并公开函数以简化与业务逻辑的交互。另一方面,Facade公开功能以简化业务逻辑,但不一定简化与UI(MVC)应用程序的通信。
Facade vs.
Remote Facade (Service?): 明显是不同的,因为Remote Facade必须使用DTO作为通信消息。如果您仍然希望将其用作常规对象(属性、事件),则Remote Facade将需要某种代理;但代理将无论如何将DTO用于实际对象,即Remote Facade。
可能的流程:
controller-facade-dao
- 可疑,但仍然可能。Facade通常不仅用于包装DAL。除子系统外,还应该有更成熟的东西。但是,如果Facade是业务逻辑的一部分,那么是可以的。但是子系统必须更加强调。对我来说,仅包装DAL还不足以称其为Facade。
controller-service-dao
- 绝对可能。许多远程服务直接通过DAL与数据库交互。
controller-facade-service-dao
- 如果您将服务视为子系统,则可能会出现这种情况。
我想再添加一个有意义的内容:
controller-service [layer]-facade(业务的一部分)-子系统(例如会计、自主业务)-dao
- 我相信你可以翻译这个。
记住,Service(或远程Facade)可以存在于流程中的任何位置。这只是由您的分布需求所决定的。