vic*_*csz 5 c# java oop design-principles
我在代码审查期间遇到了以下代码.
我的直觉告诉我,这不遵循适当的OOP.
我认为相反,LoadObject方法应返回一个新的SomeObject对象,而不是修改传递给它的那个对象.虽然我无法真正找到解释为何更好的原因.
我的解决方案更好吗?如果是这样,为什么?特别是在给定的代码示例(如果有的话)中打破了OOP原则或标准?
public void someMethod()
{
...
var someObject = new SomeObject();
LoadSomeObject(reader,someObject);
}
private void LoadSomeObject(SqlDataReader reader, SomeObject someObject)
{
someObject.Id = reader.GetGuid(0);
}
Run Code Online (Sandbox Code Playgroud)
编写代码的方式没有任何问题,因为您只修改someObject上的属性.
但是,在LoadSomeObject中创建someObject并返回它也是正确的.
在这一点上,两种选择都是正确的.
小智 3
我不是 OO 大师,所以对这些持保留态度。
对象应该尽可能管理自己/定义自己的行为。如果您曾经了解过松散耦合,那么这背后的原理是显而易见的。将细节转移到 SomeObject 的实现上可能是更好的设计决策LoadSomeObject
,但是对于这样一个一般的示例来说很难讨论。
可变状态在任何命令式代码(包括面向对象代码)中都完全没问题,它是这些范例的核心“功能”。OTOH,不可变状态具有不可描述的优势(我想我们在这里对这个主题有一些问题,否则请询问任何 FP 拥护者),并且拥有一些不可变对象并不是特别非 OO。
编辑:您也可以将 reader 传递给 SomeObject 的构造函数。