我真的希望能够组织我的对象,Source
是Document
对象中自己的对象。
方法#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.DocumentSource
和doc.Source
我认为在方法#1中,Process.Document.DocumentSource是多余的,有两次Document,并希望有一种方法可以隐藏该对象在程序集用户的intellisense下拉列表中可选择。
但另一方面,如果你有很多属性,那么能够将它们分组到像方法#1那样的子对象似乎更好,所以你没有在Intellisense中列出的所有属性下拉列表。
答案 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)
我会尝试将它们组织成逻辑实体。如果Type
和Data
是属于逻辑实体Source
的属性,我可能会使用您的方法#1。如果Type
和Data
与文档更相关,我会将其存储在那里。
对你来说最正确的应该是你的最终选择。在这种情况下。方法#1似乎对我来说合适。特别是如果Source
还有其他属性。