Объект - Собственность Best Practices - PullRequest
2 голосов
/ 12 ноября 2011

Мне действительно нравится возможность организовывать мои объекты, например, где Source - это собственный объект внутри Document объекта.

МЕТОД # 1

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

<<a href="http://pastebin.com/xnkGsG2P" rel="nofollow"> Просмотр # 1 полного кода PasteBin >

Однако лучше ли делать что-то подобное?

МЕТОД # 2

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

<<a href="http://pastebin.com/NFuyW5Fy" rel="nofollow"> View # 2 Полный код PasteBin >

Причина, по которой я спрашиваю, заключается в том, что он немного запутывается с первым методом, потому что вы получаете это:

Process.Document.DocumentSource и doc.Source

Я думаю, что в методе № 1 Process.Document.DocumentSource является избыточным с двойным Document и хотел бы, чтобы был способ скрыть этот объект от выбора в раскрывающемся списке intellisense пользователем сборки.

Но, с другой стороны, если у вас есть МНОЖЕСТВО свойств, лучше иметь возможность группировать их в подобъекты, как это делает метод # 1, чтобы у вас не было сотни свойств, перечисленных в Intellisense. выпадающий список.

Ответы [ 3 ]

2 голосов
/ 12 ноября 2011

Закон Деметры гласит, что метод № 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 голосов
/ 12 ноября 2011

Первый метод хорош, и Intellisense вообще не должен портить.Process.Document.DocumentSource - это тип (потому что вы используете вложенные классы), а doc.Source - это свойство.

При этом обычно рекомендуется , а не использовать вложенные классы,особенно если они публичные.Я думаю, что есть правило FxCop об этом также.Перемещение класса Document из Process и класса DocumentSource из Document хорошо очистит вещи.

1 голос
/ 12 ноября 2011

Я бы попытался организовать их в логические объекты.Если Type и Data являются свойствами, которые принадлежат логической сущности Source, я бы, вероятно, использовал ваш метод № 1.Если бы Type и Data были больше связаны с документом, я бы сохранил его там.

То, что кажется вам наиболее правильным, вероятно, должно быть вашим окончательным выбором.В этом случае.Метод № 1 кажется мне подходящим.Особенно, если Source также имеет другие свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...