Прагматический подход к разработке гибких программных систем Степан Родионов twitter.com/rodionovstepan Вторая конференция.NET разработчиков
Ортогональность
Неортогональная система
Что дает ортогональность? Разбиение системы на независимые модули
GRASP (General Responsibility Assignment Software Patterns) High cohesion Low coupling
Демонстрация
Вспомогательные практики Закон Деметры Принцип DRY Принцип «Говори, а не спрашивай» Принципы SOLID И прочие…
Демонстрация
Поднимаемся выше Класс Компонент Система
Принципы проектирования компонентов Принципы связанности компонентов Принципы сцепленности компонентов
Reuse/Release Equivalence Principle Common Reuse Principle Common Closure Principle
Acyclic Dependencies Principle В графе зависимостей между компонентами не должно быть циклов
Ациклический граф Application Message BoxTasks File FormatsDialogs Windows XML Format
Циклический граф Application Message BoxTasks File FormatsDialogs Windows XML Format
Применение DIP Dialogs Application Class A Class B Application Class B A A Server
Введение нового компонента Application Message BoxTasks File FormatsDialogs Windows XML Format New
Stable-Dependencies Principle Зависимости должны быть направлены в сторону устойчивости
Устойчивость A Устойчивый компонент B Неустойчивый компонент
Метрика устойчивости
Компоненты с разной устойчивостью Неустойчивый (S = 0) Неустойчивый (S = 0) Устойчивый (S = 1) S = 0.75 S = 0.25 Идеальная схемаНарушение SDP Stable Flexible
Решение проблемы U Stable (S = 0.75) V Flexible (S = 0.25) U Stable V Flexible IU U Interface (S = 1)
Stable-Abstractions Principle Компонент должен быть столь же абстрактным, сколь и устойчивым
Главная последовательность (0,0) (1,0) (0,1) 1 - S A (1,1) Зона неприятностей Зона бесполезности d(K) = |A(K) – S(K)|
Применение d t
NDepend
Демонстрация
Ресурсы Инфраструктура NHibernate + UnitOfWork Принципы OOD NDepend OO Design Quality Metrics
Книги
Спасибо за внимание Степан Родионов