Показатели стабильности пакета, но для конкретных классов? - PullRequest
1 голос
/ 26 мая 2011

Мне интересно, есть ли метрика, аналогичная метрике стабильности пакета, определенной Робертом Мартином, которую можно использовать, чтобы узнать, когда пакет должен или не должен зависеть от другого, по его метрике нестабильности (I):

Ca = Afferent Couplings
Ce = Efferent Couplings
I = Ce / (Ce+Ca)

Но для классов, где вместо афферентных и эфферентных связей между классами внутри пакета с классами в других пакетах; они, где афферентные и эфферентные связи между классами в одном и том же пакете (возможно, и / или также других пакетах, я действительно не знаю), давая понять, должен ли класс зависеть от другого класса по своей «нестабильности».

Редактировать: Предположительно, показатель нестабильности измеряет причины для изменения: причины не менять соотношение, но теперь, когда я думаю об этом, класс должен иметь только одну причину для изменения, а это означает, что если бы существовала подобная метрика нестабильности, класс «Я был бы 0, но все же некоторые классы« используют »экземпляры объектов других классов, делая их зависимыми от этих классов; но я не уверен в этом, есть ли понимание этого?

1 Ответ

1 голос
/ 27 мая 2011

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

Например, нестабильные компоненты должны иметь как можно меньше зависимостей (Афферентная связь), в то время как стабильные классы должны иметь как можно меньше зависимостей (эфферентная связь).В богатой модели предметной области вполне возможно иметь двунаправленные ассоциации - это означает, что вы начинаете нарушать «правила», связанные с метрикой, независимо от того, предназначены ли ваши классы стабильными или нестабильными.Обратите внимание, что на уровне пакетов / компонентов любые циклические зависимости не поощряются или даже запрещаются.

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

...