Java 可以调用Facade供内部使用吗?

Java 可以调用Facade供内部使用吗?,java,design-patterns,facade,Java,Design Patterns,Facade,我最近看到了一个带有Facade模式的EJB代码,它提供了一些在表示层(JSF)中使用的方法。但是在业务逻辑的某些部分中,Facade的方法被调用并被使用 这对我来说似乎有点奇怪,因为我认为外观应该服务于外部世界,而不是内部功能。我是对的还是我得了妄想症 这是一个粗略(愚蠢)的图表来说明情况: 是的,你说得对!Facade通过向客户隐藏复杂性和随意性,提供了复杂事物的接口。客户端可以是JSF查看页面、另一个bean或服务。只要您使用它,就不会有任何技术问题 但是一般来说,如果你用传统的方式进行分

我最近看到了一个带有Facade模式的EJB代码,它提供了一些在表示层(JSF)中使用的方法。但是在业务逻辑的某些部分中,Facade的方法被调用并被使用

这对我来说似乎有点奇怪,因为我认为外观应该服务于外部世界,而不是内部功能。我是对的还是我得了妄想症

这是一个粗略(愚蠢)的图表来说明情况:


是的,你说得对!Facade通过向客户隐藏复杂性和随意性,提供了复杂事物的接口。客户端可以是
JSF
查看页面、另一个bean或服务。只要您使用它,就不会有任何技术问题


但是一般来说,如果你用传统的方式进行分层,就不应该像你描述的那样。

是的,你是对的!Facade通过向客户隐藏复杂性和随意性,提供了复杂事物的接口。客户端可以是
JSF
查看页面、另一个bean或服务。只要您使用它,就不会有任何技术问题


但一般来说,如果你用传统的方式进行分层,就不应该像你描述的那样。

不,我认为你不应该这样。立面用于调节各层之间的界面;它也不应该从层内使用

而且也没有必要。我假设
getProductById
将调用委托给某种类型的存储库,该存储库获取
产品
。您可以使用依赖项注入将存储库注入到适当的类中。在我刚刚起草的小UML示例中(已经有一段时间了,如果一些连接不正确,请原谅),我演示了这种方法


现在,
Report
类可以访问
ProductRepository
,并且可以从那里获取数据,而不是通过Façade类。

不,我认为您不应该这样做。立面用于调节各层之间的界面;它也不应该从层内使用

而且也没有必要。我假设
getProductById
将调用委托给某种类型的存储库,该存储库获取
产品
。您可以使用依赖项注入将存储库注入到适当的类中。在我刚刚起草的小UML示例中(已经有一段时间了,如果一些连接不正确,请原谅),我演示了这种方法


现在,
Report
类可以访问
ProductRepository
,并且可以从那里获取数据,而不是通过Façade类。

我认为您是对的。如果该函数应该从业务逻辑中使用,那么它应该将该函数扩展到其他实体。在GoF术语中,内部类对Facade一无所知。如果内部类使用Facade,那么它将成为中介体。@nikita,谢谢。那是个好主意,我想你是对的。如果该函数应该从业务逻辑中使用,那么它应该将该函数扩展到其他实体。在GoF术语中,内部类对Facade一无所知。如果内部类使用Facade,那么它将成为中介体。@nikita,谢谢。很好,谢谢你的贡献。虽然我接受了Jeroen的答案,但我会给你一些放弃的投票,因为你的答案和他的一样好。可以创建额外的Facades类来防止单个Facades有很多责任。这可以避免不相关的功能集中在一个复杂的结构中。因此,我认为客户和其他客户都可以使用立面。感谢您的贡献。虽然我接受了Jeroen的答案,但我会给你一些放弃的投票,因为你的答案和他的一样好。可以创建额外的Facades类来防止单个Facades有很多责任。这可以避免不相关的功能集中在一个复杂的结构中。因此,我认为客户和其他客户都可以使用立面。