우리는 비즈니스 객체에 대해 많은 단위 테스트 및 리팩토링을 수행하고 있으며 다른 동료와 클래스 디자인에 대한 의견 이 매우 다른 것 같습니다 .
내가 팬이 아닌 예제 클래스 :
public class Foo
{
private string field1;
private string field2;
private string field3;
private string field4;
private string field5;
public Foo() { }
public Foo(string in1, string in2)
{
field1 = in1;
field2 = in2;
}
public Foo(string in1, string in2, string in3, string in4)
{
field1 = in1;
field2 = in2;
field3 = in3;
}
public Prop1
{ get { return field1; } }
{ set { field1 = value; } }
public Prop2
{ get { return field2; } }
{ set { field2 = value; } }
public Prop3
{ get { return field3; } }
{ set { field3 = value; } }
public Prop4
{ get { return field4; } }
{ set { field4 = value; } }
public Prop5
{ get { return field5; } }
{ set { field5 = value; } }
}
"실제"클래스에서는 모두 문자열이 아니지만 경우에 따라 완전히 공용 속성을위한 30 개의 백업 필드가 있습니다.
나는 이 수업이 싫고 내가 까다로운 것인지 모르겠다. 몇 가지 참고 사항 :
- 속성에 로직이없는 개인 백업 필드는 불필요하며 클래스를 팽창시킵니다.
- 여러 생성자 (약간 괜찮지 만)와 결합
- 공개 세터가있는 모든 속성, 나는 팬이 아닙니다.
- 비어있는 생성자로 인해 속성에 값이 할당되지 않을 수 있습니다. 호출자가 알지 못하면 잠재적으로 매우 원치 않는 동작을 테스트하기 어려울 수 있습니다.
- 너무 많은 속성입니다! (30 건)
구현 자로서 주어진 시간에 객체의 상태 를 실제로 아는 것이 훨씬 더 어렵다는 것을 알았 습니다 Foo
. " Prop5
객체를 만들 때 필요한 정보가 없을 수도 있습니다 . 알겠습니다. 이해가 되겠지만 Prop5
세터 만 공개하면 클래스의 속성은 항상 30 개까지는 아닙니다."
나는 "쓰기 쉬운 (모든 사람이 쓰는)"과는 반대로 "사용하기 쉬운"클래스를 원한다는 점에서 엄청나거나 까다로운가요? 위와 같은 수업이 나에게 비명을 지르며, 이것이 어떻게 사용 될지 모르겠 기 때문에 모든 경우를 대비하여 공개 할 것 입니다.
내가 엄청나게 까다 롭지 않다면, 이런 생각에 맞서기위한 좋은 주장은 무엇입니까? 나는 의도적으로 논쟁하지 않고 논란의 여지가 많기 때문에 논쟁을 잘 표현하지 못한다.
get
또는 set
:-) 대신 완벽하게 추가 할 수 있다는 것입니다.