我刚刚阅读了一些旧的面向对象设计书籍,以及一些我不太了解的内容。
如果我使用类似存储库模式的东西,可以说。
即:
interface ICarRepository {
IEnumerable<car> GetCarCollection();
}
class MsSqlCarRepository : ICarRepository {
IEnumerable<car> GetCarcollection(){ ................ };
}
class car {
int CarId;
string CarName;
}
上面的代码大致是 C#,但并不真正相关。
虽然上面的方法效果很好,并且是我自己经常看到和使用的,但我读过的所有关于 oo 的书籍通常都指出对象将其方法和属性组合在一起。
所以忽略界面部分不应该更符合以下内容:
class car {
int CarId;
string CarName;
IEnumerable<car> GetCarcollection(){ ................ };
}
???
最佳答案
这都是关于代码不同部分的层之间的耦合。将域模型与可以在这些域模型上执行的操作/契约分开,可以让您在其他上下文中更轻松地重用这些域模型。例如,假设有人想要使用此 Car 模型定义除 GetCarcollection
之外的其他操作。在这种情况下,他将编写一个不同的存储库接口(interface),并且您不需要修改此域模型。另一方面,如果您在 Car 对象内定义了 GetCarcollection
方法,则模型的其他使用者将不高兴,因为他可能不关心您的方法,但想使用自己的方法。
关于c# - 为什么在面向对象设计中某些模式的类具有单独的数据类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7423689/