不对象capapble保存入数据库,败坏了的凝聚力之类的?
题
说来,在条款的目的导向的设计,你想要得到的功能节省本身进入数据基础的对象战利品的凝聚力之类的?
想象一下:
Product p = new Product()
{
Name = "Joy Rider",
Price = 100,
Currency = "USD"
};
你想拯救这个产品p到数据库是更好的工作要做,在这样的:
p.Save();
或者在一种这样的事情:
ProductServices.SaveProduct(p);
你怎么想?
解决方案
它不会干扰的单一责任的原则。的产品的用途类的例子是代表一个产品和操作上的该产品。相互作用的数据库并不是一个核心部分类的责任。
具有ProductServices类增加了维护你的代码。假设逻辑对于保存数据库中的对象是改变(其它可能)来做你想要改变每一类实体在你的系统?
其他提示
可以将自己保存到数据库的对象将违反 SRP (单一责任原则)。
持久性本身就是一个责任,应由专门的阶级来处理。
这将是对凝聚力低下的补充 - 与持久性有关的成员与那些不遵守持久性的班级方法无关,也不会使用。
按照 面向对象的设计 只有这样,保存方法作为一部分没有任何问题 产品. 。实际上,这将是面向对象的设计世界中的首选方法。从纯粹的OO角度来看,您不希望它将其分解,因为它比对象更有功能。
但是,如果您相信依赖性反转原则,则说明高级模块不应取决于低级模块;然后,保存方法是合适的,但应将抽象连接类型作为参数。这将为您提供一个不错的对象模型,该模型包括保存方法,但对连接类型不了解。
不隶属于 StackOverflow