在Java中应用边界-控制-实体 (BCE)模式:
@Stateless //1st boundary
public class A {}
@Stateless //2nd boundary
public class B {}到现在为止,一切都还好,现在,让我们假设,出于某种原因,我需要使用B在A上公开的一些服务,所以,A现在看起来像:
@Stateless
public class A {
@Inject
B b;
//... call some B's methods
}但是,根据BCE模式代表
控件元素可以与其他两种元素进行通信,但实体和边界元素不应该直接通信。
显然,对于JPA实体,它们需要相互通信(否则,“联接”是不可能的)。然后,我以一些相关的问题结束:
( 1) 为什么禁止边界之间的通信?
2)在Java下,我们可以使用@Remote接口,这样做是否仍然违反语句?
@Stateless
public class A {
@Inject
RemoteB b; //now uses a remote dependency
}
@Stateless
@Remote(RemoteB.class)//implements a remote interface
public class B {}3) Java如何解决模式.
发布于 2014-09-14 22:36:11
如果某些边界需要沟通,那么交流是一种难闻的气味,也许您的设计需要重构,例如,提取控件中的常见行为,并在两者中使用。在使用@Remote的情况下,边界不仅与接口高度耦合,还与所使用的DTO(DTO总是重复状态)高度耦合。在面向SOA/微服务的体系结构中,如果您需要这种相互通信,您应该更喜欢低耦合,这意味着使用json/xml消息。
Java允许您使用jax-rs来实现低耦合。
第5次AirHacks会议
发布于 2014-07-10 10:57:05
首先,我的建议是使用架构作为如何构建应用程序的指导方针,但不要将其作为一项法律--因此,始终要使其适应您的需要,并做一些明智、简单和适合您的情况的工作。
边界背后的想法是,它是唯一一个外部可见的契约,对其背后的业务逻辑来说,它可能会发生变化,并且其细节是隐藏的。保持对其他边界的依赖是合理的--但是控件可以根据需要使用并被多个边界调用。
Adam,Java大师之一,在他的研讨会中强调并谈到了这种模式,即他在这个例子中解释了。另一个好文章是这篇吗?。
https://stackoverflow.com/questions/24665136
复制相似问题