我的代码遵循模板:
class A
{
private B _b;
public A(B b)
{
_b = b;
}
}
class B
{
private A _a;
public B(A a)
{
_a = a;
}
}
这被认为是不好的设计吗?
除了在B中添加void SetA(A a)
之类的方法之外,初始化两个类的最简单方法是什么?
答案 0 :(得分:3)
这被认为是不好的设计吗?
谁知道(这取决于您的实际使用情况...),但如果您的代码与您的代码段相似,那么您可能会尝试使用composition而不是inheritance,继承会更好。
考虑以下句子:
实际上我怀疑B
可能有A
,但我确定B
可能是A
。
另一方面,如果您使用A
或B
类标识符只是为了向我们展示代码示例,但在您的代码中,您的类不能用表示是动词(例如B
是A
),那么您的设计可能就是正确的轨道。
BTW,如果A
和B
是 1:1 关联,其中一个A
有一个B
和一个{{1如果关联有意义,它本身并不是一个糟糕的设计...例如,B
实体有一个A
,并且有一个User
UserProfile
拥有所有者UserProfile
:
User
除了添加一个类之外,初始化两个类的最简单方法是什么 像B中的void SetA(A a)这样的方法
最简单的方法是使用读写属性(即getter和setter的属性),并在类已经实例化后设置它们,或者使用构造函数。实际上没有最简单的方式,但根据您的实际使用情况,最合适的方式。
如果您可以使用是动词来表达类关系(即public class User
{
public UserProfile Profile { get; set; }
}
public class UserProfile
{
public User OwnerUser { get; set; }
}
是Cat
),则使用继承,而当您表达时可以使用合成 - 使用具有动词的关系(即Animal
有House
)。