2011-11-11 3 views
2

나는 이런 식으로 내 개체를 구성 할 수있는 것을 좋아합니다. SourceDocument 개체 내부의 개체입니다.개체 - 속성 모범 사례

방법 # 1

Dim doc As New Process.Document() 
doc.Source.Type = "URL" 
doc.Source.Data = "http://myOtherDomain/MyOtherPage.htm" 

< View #1 PasteBin Full Code> 그러나

, 그것은 이런 식으로 뭔가를 할 수있는 더 좋은 방법입니다?

방법 # 2

Dim doc As New Process.Document() 
doc.SourceType = "URL" 
doc.SourceData = "http://myOtherDomain/MyOtherPage.htm" 

< View #2 PasteBin Full Code 당신이 얻을 수 있기 때문에 첫 번째 방법과 약간의 혼란을 가져 오기 때문에>

물어 그 이유는 다음과 같습니다

Process.Document.DocumentSourcedoc.Source

메서드 # 1에서 Process.Document.DocumentSource는 Document가 두 번 중복되어 있고 어셈블리 사용자가 Intellisense 드롭 다운 목록에서 해당 개체를 선택하지 못하게하는 방법이 있었으면 좋겠다.

하지만 속성이 많으면 메서드 # 1처럼 하위 개체로 그룹화하는 것이 더 좋을 것입니다. 그래서 100 가지 속성이 모두 나열되어 있지 않습니다. Intellisense 드롭 다운 목록.

답변

2

Law of Demeter은 두 가지 옵션이 주어지면 방법 2가 방법이라고 말합니다.

doc.Source.XYZ 대신 Source 개체를 제공 할 수 있습니다. Source 필요한 경우

// C# -- don't know VB.Net 
var source = new DocumentSource(); 
... 

doc.Source = source; 

네번째 생성자 메소드 효과적으로 주입 될 것이다.

var source = new DocumentSource(); 
... 
var doc = new Process.Document(source); 
+0

"Demeter의 법칙"에 대한 링크는 정확히 내가 찾고있는 것입니다. 나는 내가 실제로 상황에 대해 보호하려고 노력하고있는 어떤 것의 위험에 처해 있다고 생각하지 않지만, 가능하다면 모범 사례를 사용하여 앞으로 나아가고 싶다. 그리고 그것은 방법 # 1을 사용하지 않는 좋은 경우를 만드는 것처럼 보인다. 나는'Process.Documents.add (doc)'줄에도 같은 규칙을 적용해야한다. 맞습니까? 다른 질문이 생깁니다. 'DocumentSource'와'DocumentCollection'과 같은 모든 객체를 최상위 네임 스페이스 레벨에 두어야합니까? 그리고 그것들을'ProcessDocumentSource'라고 부르죠? – EdenMachine

+0

RE'.add' 호출 : 예. –

+0

다른 클래스들 : 당신은 아마도 그것들을 상위 레벨에서 원할 것입니다. –

2

첫 번째 방법은 괜찮 으면서 Intellisense를 전혀 엉망으로 만들지 않아야합니다. Process.Document.DocumentSource은 유형이므로 (중첩 클래스를 사용하고 있기 때문에) doc.Source이 속성입니다.

그런데 일반적으로 이 아니라면은 공개 된 경우 중첩 클래스를 사용하지 않는 것이 좋습니다. 나는 그것에 대해서도 FxCop 규칙이 있다고 생각한다. Document 클래스를 Process 밖으로 이동하고 DocumentSource 클래스를 Document에서 벗어나면 잘 정리됩니다.

1

논리적 개체로 구성하려고합니다. TypeData이 논리 엔터티 Source에 속하는 속성 인 경우 사용자의 방법 # 1을 사용합니다. TypeData이 문서와 더 관련이 있다면, 나는 거기에 그것을 저장할 것이다.

가장 정확한 것으로 보이는 것이 최종 선택 일 것입니다. 이 경우. 방법 # 1은 나에게 적절하다고 보인다.특히 Source에도 다른 속성이있는 경우