Façade与Service的区别
对于调用者(比如Controller层)来说,Façade与Service没什么区别,都是业务逻辑的调用入口。但实现机制上来说,Façade与Service是有差别的。
Façade是很“薄”的一层,它本身并不实现业务逻辑,它只是负责根据外界的请求调用对应的业务逻辑类。
相对Façade,Service是很“厚”的一层。如果是事务脚本模式,它就完全实现了业务逻辑;如果使用领域模型,那么它负责组织跨领域模型的调用。但即使业务逻辑是由领域模型实现,Service本身也必然会使用事务脚本模式——因为Service的身份是“组织”业务逻辑的调用,而不是实现业务逻辑。Service会调用事务,这也是与Façade的区别之一。
有了Service层,还需要Façade层吗?
这个问题相当于:有了Domain Model还需要Service吗?从开发效率上考虑,Façade层是多余的。但在某些情况下Façade还是能起一些作用,比如WebService开发,需要在每个方法上标记WebMethod。如果直接在Service层的方法上使用WebMethod之类的专用Attribute,这意味着WebService框架对Service有侵入性(还好,Attribute的侵入性比继承要轻得多)。这个时候Façade就派上用场了。