그래서 내가 가진 값을 설정하는 클래스 내의 필드 또는 속성을 사용해야합니다나는 코드의 조각을 통해 동료와의 친선 인수에
public sealed class NewObject
{
private string _stuff = string.Empty;
public string Stuff
{
get { return GetAllStuff(); }
}
private string GetAllStuff()
{
//Heavy string manipulation of _stuff
}
public NewObject(string stuffToStartWith)
{
_stuff = stuffToStartWith;
}
public static NewObject operator +(NewObject obj1, NewObject obj2)
{
if (obj1 == null)
throw new ArgumentNullException();
if (obj2 == null)
throw new ArgumentNullException();
NewObject result = new NewObject(string.Empty);
result._stuff = String.Concat(obj1._stuff, obj2._stuff);
return result;
}
}
인수는 연산자 재정의 이상이었다. 공동 작업자는 생성자가 아닌 사적인 필드의 값을 설정하는 것이 최상의 프로그래밍 방법은 아니라고 생각합니다. 동료가 제안한 해결책은 Stuff
속성의 이름을 AllStuff
으로 리팩토링하고 get
및 set
접근자를 가진 속성 Stuff
을 추가하고 연산자 오버라이드에 새로운 Stuff
속성을 사용하는 것입니다. 보이게하기 :
public static NewObject operator +(NewObject obj1, NewObject obj2)
{
if (obj1 == null)
throw new ArgumentNullException();
if (obj2 == null)
throw new ArgumentNullException();
NewObject result = new NewObject(string.Empty);
result.Stuff = String.Concat(obj1.Stuff, obj2.Stuff);
return result;
}
나는 동의하지 않는다. 나는 속성이 클래스 밖에서 읽기 전용으로 유지되기 때문에 첫 번째 방법이 더 좋다고 느낍니다. 내 질문은 개체 지향 디자인의 가장 좋은 방법은 어떤 방법입니까?
@ cyber : 나는 이것이 OP의 문제가 아니라고 생각한다. 그의 동료가 생성자 또는 속성 구현 외부에서 직접 개인 변수를 변경하지 않겠다는 옹호자처럼 나에게 들렸다. 나는 그가 물체의 삶에 대해 같은 가치를 지키라고 옹호했다고 생각하지 않는다. –