2011-11-11 8 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を2度冗長とし、アセンブリのユーザーがIntellisenseドロップダウンリストでそのオブジェクトを選択できないようにする方法があることを願っています。

しかし、多くのプロパティがある場合、メソッド#1のようにそれらをサブオブジェクトにグループ化する方が良いでしょう。したがって、100個のプロパティすべてがIntellisenseドロップダウンリスト。

答えて

2

Law of Demeterには、2つのオプションを指定すると、方法2があります。

doc.Source.XYZの代わりにSourceオブジェクトを指定する方法もあります。

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

doc.Source = source; 

Sourceが必要な場合は第四の方法は、効果的にコンストラクタ注入であろう。

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

「法律の法則」へのリンクは、まさに私が探していたものです。私が実際に自分の状況で守ろうとしていることは、私が危険にさらされているとは思わないが、可能な限りベストプラクティスを使って前向きにベンチャーしたいと思っており、方法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にも他の特性がある場合。

関連する問題