목록이 공개되는지 여부에 관심이 있는지 여부에 따라 다릅니다. & 공개 형식의 구체적인 유형에 액세스하면 구현 세부 사항이 노출되고 클래스와 해당 소비자 간의 결합이 증가합니다. 또한 구현 세부 사항이 더 이상 올바르게 캡슐화되지 않아 데이터 일관성을 적용 할 수있는 기회가 ClassA
으로 제한됩니다.
가끔은 완벽하게 받아 들일 수 있습니다. 가끔은 그렇지 않습니다.
개체 모델이 벙어리 인 경우 허용 될 수 있습니다. 바보처럼, 나는 그것이 단지 데이터를 포함한다는 것을 의미한다. 이와 같은 상황은 JSON/XML을 객체로 파싱 할 때 자주 발생합니다. 즉, 데이터가 미러링되도록 구성되며, 동작은별로 중요하지 않으므로 문제가되지 않습니다. 작은 코드베이스에서 해킹을하거나 변경의 범위가 제한되어 있거나 동작이 거의 없다면 더 쉽게 수용 할 수 있습니다.
나는 보통 피하고 싶다.
먼저 ClassA
의 목록에 추가하는 항목은 소수이어야한다고 가정합니다. AddItem()
메서드를 작성하면이 확인을 쉽게 적용 할 수 있지만 목록이 공개 된 경우 효과적으로 수행하는 것이 훨씬 더 어려워집니다.
두 번째로 목록을 사전으로 변경하기로 결정했다고 가정 해보십시오. 이전에 ClassA
의 구현 세부 정보를 사용했기 때문에 호출 코드 사이트 (ClassB
, 하나)를 깨뜨릴 수 있습니다. 대신 AddItem()
및 RemoveItem()
또는 ClassA
에 대해 비슷한 메서드를 만든 경우 ClassB
은 내부 구현이 집합, 사전 또는 목록인지 여부에 상관 없으며 변경이 이루어지면 중단되지 않습니다.
'점으로 물건 넣기'(예 : blah.List[3].GetProduct(3).Reviews.First()
)와 관련된 지침은 이름이 The Law of Demeter입니다. 데메테르의 법칙의
두드러진 점은 다음과 같습니다
기본적인 개념은 주어진 객체가 구조 또는 (하위 구성 요소 포함) 무엇의 특성에 대해 가능한 한 적은 을 가정해야한다는 것입니다.
코드를 더 작성해야하지만 변경 사항을 보완해야합니다.
나에게 잘 보입니다. 무슨 상관이야? – jrummell
"이 같은"무엇을 의미합니까? 다른 반에서 온거야? 부동산을 통해? Add 메서드를 통해? –
클래스 A는'public static' 클래스입니까? 아니면 클래스 B의 MyList에 어떻게 접근하고 있습니까? –