我的代码可以工作,但是我不知道实现它的方式是否合适。基本上,我想保持模式不变。

代码如下:

包模型(省略了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模型的唯一包装,当与它们交互时,您将减少不需要的副作用的数量。这些之间的任何交互都将在立面中进行。

此外,通过使立面依赖于接口而不是具体的类(即ICABusinessICCBusiness等)来实施此模式。然后,访问任何模型的唯一方法应该是通过这些接口,并且显然,您不应使用带有CxBusiness成员(无交叉依赖性)。一旦您设置了这些限制,实现本身就将朝着更加模块化和更少耦合的设计方向发展。

09-10 14:36