我最近看到了一个带有 Facade 模式的EJB代码,以提供一些在表示层(JSF)中使用的方法。但是在业务逻辑的某些部分中,Facade的方法被调用并且已被使用。
这对我来说有点奇怪,因为我觉得Facade应该服务于外部世界而不是内部功能。我是对的还是我偏执狂?
这是一个粗略的(愚蠢的)图表来说明情况:
答案 0 :(得分:1)
是的,你是对的! Facade通过隐藏其客户端的复杂性或随意性来提供复杂的界面。客户端可以是JSF
查看页面或其他bean或服务。没有技术问题,只有当它的工作意图或责任完全相关时。
但一般来说,如果你用传统的方式进行分层,那就不应该像你所描述的那样。
答案 1 :(得分:1)
不,你不应该在我看来。外立面用于调节层之间的界面;它也不应该从图层内部使用。
它也没有必要。我假设getProductById
将调用委托给某种获取Product
的存储库。您可以使用依赖项注入将存储库注入适当的类中。在我刚刚编写的小UML示例中(已经有一段时间了,请原谅我,如果某些连接不正确)我演示了这种方法。
现在Report
类可以访问ProductRepository
并可以从那里获取数据,而不是通过Façade类。