다음은 속성과 내 반론에 대한 몇 가지 주장입니다.
getter 및 setter 메소드를 작성하는 것보다 사용하기 쉬움
Getter와 Setter 메소드 쌍은 코드 냄새입니다. 이것을 쉽게 작성하는 것은 Scantron 양식을 사용하고 모든 'C'를 채워 수학 시험에 쉽게 실패하지 못하게하는 것과 같습니다. 지속성을 위해 상태 만 포함 된 객체는 getter / setter를 사용하지 않아야하며 지속시 불변의 객체를 생성해야합니다.
대상 소비자에게 중요한 것은 대상이 아닌 대상이하는 방식입니다. 그것의 행동은 그것이하는 일입니다. 그것의 상태는 그것을하는 방법입니다. 객체 상태에 관심이있는 경우 (영구를 제외하고 OO를 위반하더라도) 단순히 OOP를 수행하지 않고 그 이점을 잃어 버리는 것입니다.
소비자에게 대략적인 성능 표시를 제공합니다.
이것은 주어진 재산에 대해 미래에 변할 수있는 것입니다. 릴리스 1.0에서 PropertyX에 액세스하면 단순히 필드가 반환됩니다. 릴리스 1.5에서 필드가 널인 경우 PropertyX는 널 오브젝트 패턴을 사용하여 새 널 오브젝트를 작성합니다. 릴리스 2.0에서는 필드가 PropertyX의 getter 메소드에 의해 추가 검증되고 있습니다.
재산이 점점 복잡 해짐에 따라 재산 사용에 대한 성과 표시는 점점 더 진실 해 보이지 않습니다.
그들은 공공 장소보다 낫다
사실입니다. 그러나 방법도 마찬가지입니다.
그것들은 방법과 객체의 근본적으로 다른 측면을 나타내며, 객체의 모든 소비자는 이것에 관심을 가져야합니다.
위의 내용이 모두 사실입니까?
입력하기가 더 쉬워요
물론 타이핑 myObject.Length
은 타이핑 보다 쉽지만 myObject.Length()
약간의 구문 설탕으로 해결할 수는 없습니까?
속성 대신 메서드를 사용하는 이유는 무엇입니까?
성능이 보장되지 않습니다. 메소드가 더 복잡 해지더라도 API는 진실성을 유지합니다. 소비자는 성능 문제가 발생하고 API에 의존하지 않는 경우 코드를 프로파일 링해야합니다.
소비자가 생각하는 것은 적습니다. 이 속성에 세터가 있습니까? 방법은 확실하지 않습니다.
소비자는 적절한 OOP 사고 방식을 생각하고 있습니다. API 소비자로서 객체의 동작과 상호 작용하는 데 관심이 있습니다. API에서 속성을 볼 때 상태와 매우 비슷합니다. 실제로 속성이 너무 많으면 속성도 아니어야하므로 실제로 API에있는 속성은 소비자에게 표시되는 상태입니다.
API 프로그래머는 리턴 값이있는 메소드에 대해 더 깊이 생각하고 가능한 경우 이러한 메소드에서 오브젝트의 상태를 수정하지 않습니다. 가능하면 쿼리에서 명령을 분리해야합니다.
왜 메서드 대신 속성을 사용합니까? MSDN의 대부분의 요점 은 코드 냄새 자체이며 속성이나 메서드에 속하지 않습니다.
(이러한 생각은 CQS에 대해 생각한 후에 나에게왔다.)
type GetFoo() void SetFoo()
만 번 쓴다면 완벽하게 이해됩니다 . 항상 C # 코드를 작성하면서 속성에 의해 혼동되지 않았습니다.