父类中的getter和setter

时间:2011-05-17 09:14:32

标签: java actionscript-3 actionscript

我对最佳做法有一个快速的问题,如果在特定情况下,吸气剂和制定者是最佳选择。这种情况是我有类'A'实例化类'B'和'C'。 A类包含要访问的类B和C的公共getter和setter,因此数据是集中的。

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

由于

克里斯

3 个答案:

答案 0 :(得分:4)

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

public class A {
    private var b : B;

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

然后,您可以通过称为Inversion of Control的进程从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);
    }
}

答案 1 :(得分:0)

是。这样,B和C类的范围就会减少,只能通过A访问。

答案 2 :(得分:0)

答案简短:取决于

长篇:如果B和C类封装了在A类之外可能有用的数据和/或功能,A是B和C的“仅”客户端,那么让它们可以独立于A进行实例化并设置为一个像setA/setB这样的二传手。这样,其他类可以出于任何原因使用B和C.您还可以利用继承,其中具有增强功能的实例在运行时被引入到类A中(例如,通过像JohnReeeves所述的控制框架的反转)。

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

一般而言,你可以越多地躲避你的实施越好,让外面的世界知道只需要知道正常运作所需的一切。

所以想想A,B和C的接触目标,他们与对方和外界的关系,并让你做出决定。