假设我有以下两个类:
public class MyDevice
{
int id;
string name;
// other resources
public MyChannel CreateChannel()
{
return new MyChannel(this);
}
}
public class MyChannel
{
int id;
MyDevice _device;
// other resources
public MyChannel(MyDevice device)
{
_device = device;
}
}
实际上,每个设备都可以有可变数量的 channel 。所以关系是每个设备都有一个 channel 的集合。令我困扰的是代码编写方式 MyChannel
对象有一个 MyDevice
对象。但是代码中定义的关系更方便,我也想保持简单。
为了平息脑后的唠叨 - 我一直指出 SqlConnection
和 SqlCommand
的结构方式,其中每个 SqlCommand
对象有一个 SqlConnection
对象,尽管每个 SQL 连接都有一系列 SQL 命令。
我是否违反了面向对象编程的任何原则/这段代码有异味吗?
编辑:
明确:在面向对象设计方面,将 has-a 关系放在头上是一个很大的禁忌吗?如果是这样,那么忽略/忽视的单一原则是什么?
最佳答案
我假设示例中所说的 Device
应该是 MyDevice
。您基本上可以引用父 channel ,即设备。我不认为这会破坏 OO,而且在很多情况下很有用。纯粹主义者会说它打破了父级的封装,并创建了从 channel 到 channel 外和 channel 以外的任何事物的耦合。
关于c# - 这个 Composition 是否违反了面向对象编程的任何原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29233818/