我对最佳做法有一个快速的问题,如果在特定情况下,吸气剂和制定者是最佳选择。这种情况是我有类'A'实例化类'B'和'C'。 A类包含要访问的类B和C的公共getter和setter,因此数据是集中的。
这是最佳做法还是最好通过参数将数据传递给B类和C类?
由于
克里斯
答案 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的接触目标,他们与对方和外界的关系,并让你做出决定。