繁体   English   中英

父类中的获取器和设置器

[英]Getters and setters in parent class

我对最佳做法有一个快速的问题,在特定情况下吸气剂和塞脂剂是否是最佳选择。 这种情况是当我有类“ A”实例化类“ B”和“ C”时。 A类包含用于B和C类的公共获取器和设置器,以便将数据集中化。

这是最佳实践还是最好通过参数将数据传递给B和C类?

谢谢

克里斯

就个人而言,我建议对应用程序进行结构设计,以便传递类B和C所需的所有数据。 这将消除它们对A类的依赖,从而减少耦合和复杂性; 例如:

public class A {
    private var b : B;

    public function A() {
        b = new B();
        b.someData = "some data that b requires";
    }
}

然后,您可以通过称为“控制反转”的过程从类A中删除类B的实例化来进一步改善此情况。 这样,您就可以使B类成为A类的依赖项。

public class A {
    private var b : B;

    public function A(b : B) {
        this.b = b;
    }
}

然后,这允许外部客户端提前配置B实例,从而使项目的结构更灵活地适应以后的更改:

public class Client {
    public function Client() {
        var b : B = new B();
        b.someData = "The Client is now Configuring B";

        var a : A = new A(b);
    }
}

是。 这样,B和C类的范围会减小,并且只能通过A进行访问。

简短的答案:这取决于

漫长的一句话:如果您的B和C类封装了可能在类A之外有用的数据和/或功能,并且A是B和C的“唯一”客户端,则使它们与A无关地可实例化,并通过setter设置为A如setA/setB 这样,其他类无论出于何种原因都可能使用B和C。 您还可以利用继承功能,在这种情况下,具有增强功能的实例在运行时会被引入A类(例如,通过诸如JohnReeeves所述的Inversion of Control框架)。

如果它们仅在A类的上下文中有意义,则封装仅A直接使用的功能,将其隐藏在外部世界之外,并通过A类的方法/属性进行参数化。 这使您可以自由更改B和C的实现,以免外部任何代码感到不安。 A是一个公共接口,也就是说,B和C是内部实现。

通常,您可以从实现中隐藏的越多越好,让外界仅了解必要的信息才能正常运行。

因此,请考虑一下A,B和C的确切目标,彼此之间以及与外界的关系,然后做出决定。

暂无
暂无

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

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