繁体   English   中英

Facade模式的最佳实践是什么?

[英]What are the best practices for Facade pattern?

我的代码工作正常,但我不知道我实现它的方式是否合适。 基本上,我想保持模式而不违反它。

代码如下所示:

包模型(省略了setter / 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)?

我认为一些澄清可能会对您有所帮助:外观模式可以帮助您为几个 隐藏在外立面后面隐藏到外部世界的提供单一访问点 通常这些类形成某种模块或逻辑单元。

您正在努力的是立面背后的结构及其层次结构。 这很难在不了解整体情况的情况下进行分析,但从我掌握的信息中,最好有几个你的Business类,可以从外观单独调用。 在Business对象之间创建交叉调用将有机会对代码进行分类。

至于最佳实践和技术,最简单的方法是绘制一个的草图 ,这通常会澄清很多。 而且你已经在基于UML的文档的一半了。 :-)

顺便说一句,避免给你的类名称,如CA,CB ......这就像命名变量a001,a002一样......说起名字对可读性做了很多!

通过使用Facade,您可以调用多个CxBusiness对象并将其操作集成到一个有意义的结果中。 就是 Facade的目的,通过隐藏简洁明了的操作后面的5个不同组件的交互来简化与Business层的交互: methodOne

但是对于个人CxBusiness ,您希望避免彼此之间的交叉呼叫; 否则,您将最终得到一个复杂的依赖结构,可能会遇到循环引用。 保持每个CxBusiness作为每个Cx模型的唯一包装,并且在与它们交互时减少不需要的副作用的数量。 这些之间的任何互动都将在立面上进行。

此外,通过使外观依赖于接口而不是具体类来强制执行此模式: ICABusinessICCBusiness等。然后,访问任何模型的唯一方法应该是通过这些接口,显然,您不应该有一个具体的CxBusiness ICxBusiness成员(没有交叉依赖)。 一旦你实施了这些限制,实现本身就会流向更模块化,耦合度更低的设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM