2009-07-13 2 views
2

Я просто запускал один из своих проектов через NDepend, и отчет поставил мою сборку прямо в угол зоны боли. Я просто задавался вопросом, не стоит ли мне беспокоиться.Выход из зоны боли - NDepend

Что означает зона боли? Разве это не означает, что существует много связей, и вещи не могут измениться очень легко.

Недавно я удалил много интерфейсов и закрепил множество классов, так как я не хочу, чтобы пользователь расширил API (только в некоторых местах). Это .NET Wrapper для COM-объекта, поэтому пользователю не нужно ничего расширять.

Какие хорошие способы вывести меня из зоны боли?

Благодаря

ответ

3

Я думаю, что Скотт Hanselman написал довольно длинный пост о NDepend и его последствия зоны

http://www.hanselman.com/blog/ExitingTheZoneOfPainStaticAnalysisWithNDepend.aspx

Как он заявил, и я согласен, сборка зависания в зоне боли есть не обязательно плохой предмет. Тем не менее, это указывает на необходимые изменения с вашей стороны, когда в день принятия решения используется другой компонент (COM или иным образом) для выполнения того же уровня функциональности.

Вопрос, вероятно, заключается в том, «насколько вероятно, мы собираемся заменить этот слой для другого фреймворка/библиотеки?»

+0

Да, я прочитал этот пост, это хороший пост. Я просто не видел, что мнения других народов где. –

+0

Вам не нужно беспокоиться о компонентах, которые предоставляют постоянно распространенные блоки функциональности. Слои, которые могут измениться во времени, например веб-сервис для конвертера валют, могут извлечь выгоду из более ранней абстракции, чтобы избежать зоны боли позже. – icelava

11

Идея зоны боли заключается в выявлении компонентов, как: -Вы бетон (т.е. их пользователи привязываться с классами вместо интерфейсов) -Вы популярные (т.е. они используются многими другими компонентами).

Популярные относится к понятию стабильности. Компонент стабилен, если при изменении он разбивает много других компонентов, которые его используют. Одним словом: Popular = Stable

Другая идея заключается в том, что интерфейсы менее подвержены изменениям, чем классы. Вот почему принято считать, что предпочтительнее использовать интерфейс вместо класса, у вас меньше шансов быть «статически» сломанным + у вас меньше шансов быть «семантически» сломанным, так как ваш код не должен быть связанные с любыми деталями реализации (которые сильно подвержены изменениям).

В результате, будучи бетоном + стабильным, выставляйте компонент для некоторой потенциальной боли развития: он сильно подвержен изменениям +, каждый из этих изменений потенциально может сломать много кода.

В вашем случае и некоторых других случаях пребывание в зоне боли не обязательно является плохим. Важно, чтобы оба были осведомлены об этом факте +, если действительно ваш компонент вызвал боль, а затем отмените свой код на интерфейсы.

+0

woot! сам человек говорил! – icelava

+1

В луке (http://jeffreypalermo.com/blog/the-onion-architecture-part-1/) или архитектуре шестиугольника (http://c2.com/cgi/wiki?HexagonalArchitecture), что, по-видимому, является хорошей идеей для меня, то, конечно, модель центрального домена всегда будет очень конкретной и очень популярной? То есть как точка боли, когда я не думаю, что это действительно одно. Я действительно не думаю, что модель домена должна быть скрыта за интерфейсами. – Anthony

Смежные вопросы