对象 - 属性最佳实践

时间:2011-11-11 22:44:08

标签: .net oop properties

我真的希望能够组织我的对象,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那样的子对象似乎更好,所以你没有在Intellisense中列出的所有属性下拉列表。

3 个答案:

答案 0 :(得分:2)

第一种方法很好,不应该搞乱Intellisense。 Process.Document.DocumentSource是一种类型(因为您使用的是嵌套类),而doc.Source是属性。

也就是说,通常建议使用嵌套类,特别是如果它们是公开的。我认为这也有一个FxCop规则。将Document课程从Process移出,DocumentSource课程从Document移出,可以很好地清理内容。

答案 1 :(得分:2)

只有这两个选项,Law of Demeter说方法#2是要走的路。

第三种方法可能是提供Source对象,而不是设置doc.Source.XYZ

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

doc.Source = source;

如果需要Source,第四种方法实际上是构造函数注入。

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

答案 2 :(得分:1)

我会尝试将它们组织成逻辑实体。如果TypeData是属于逻辑实体Source的属性,我可能会使用您的方法#1。如果TypeData与文档更相关,我会将其存储在那里。

对你来说最正确的应该是你的最终选择。在这种情况下。方法#1似乎对我来说合适。特别是如果Source还有其他属性。