我的代码可以工作,但是我不知道实现它的方式是否合适。基本上,我想保持模式不变。
代码如下:
包模型(省略了setters / getters):
public class CA {
private Integer in;
private Integer jn;
}
public class CB {
private Integer kn;
private Integer ln;
}
public class CC {
private static CC instancia;
private CA a;
private CB b;
public static CC getInstancia() {
if(instancia == null) {
instancia = new CC();
}
return instancia;
}
}
包装业务:
class CCBusiness {
static CC c = CC.getInstancia();
void alter(Integer input) {
c.getCA.setIn(input);
Integer num = c.getCB.getLn();
}
}
包装外观:
class FacadeOne {
void methodOne() {
CCBusiness.alter(1);
// And more xxBusiness.xx()
}
实际的代码更加复杂,但是为了解释我的疑问,我认为这应该可行。
在一个立面中,我调用了几个Business对象,但是一个Business(在这种情况下为CC类)可以修改其他类的属性(在本例中为CC内部的类)是合适的吗?我应该创建CABusiness和CBBusiness吗?
因为,据我所知,一个企业不能调用另一个企业,因此第二个企业要参数化以从FacadeOne接收对象(如果我创建了CABusiness和CBBusiness)?
最佳答案
通过使用Facade,您可以调用多个CxBusiness
对象并将其操作集成为有意义的结果,从而摆脱困境。这是Facade的目的,通过在简洁明了的操作后隐藏5个不同组件的交互来简化与业务层的交互:methodOne
。
但是,对于单个的CxBusiness
,您要避免彼此之间的交叉调用。否则,您将获得一个复杂的依赖关系结构,该结构可能会遇到循环引用。将每个CxBusiness
保留为每个Cx
模型的唯一包装,当与它们交互时,您将减少不需要的副作用的数量。这些之间的任何交互都将在立面中进行。
此外,通过使立面依赖于接口而不是具体的类(即ICABusiness
,ICCBusiness
等)来实施此模式。然后,访问任何模型的唯一方法应该是通过这些接口,并且显然,您不应使用带有CxBusiness
成员(无交叉依赖性)。一旦您设置了这些限制,实现本身就将朝着更加模块化和更少耦合的设计方向发展。