Прагматичный подход к разработке гибких программных систем

1,310 views

Published on

В докладе рассматриваются практики, принципы и методики, позволяющие разработчикам создавать гибкое, легко масштабируемое программное обеспечение. Раскрываются принципы ортогональности, принцип DRY и др. Рассматривается энтропия в коде и как с ней бороться. Рассматриваются основные факторы, отличающие программиста-прагматика от обычного.

По материалам конференции .NET разработчиков http://www.dotnetconf.ru/Materialy/Pragmatichnii_podhod_k_razrabotke_gibkih_sistem

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,310
On SlideShare
0
From Embeds
0
Number of Embeds
437
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Прагматичный подход к разработке гибких программных систем

  1. 1. Вторая конференция .NET разработчиков<br />Прагматический подход к разработке гибких программных систем<br />Степан Родионов<br />www.rodionovstepan.ru<br />twitter.com/rodionovstepan<br />
  2. 2. Ортогональность<br />
  3. 3. Неортогональная система<br />
  4. 4. Что дает ортогональность?<br />Разбиение системы на независимые модули<br />
  5. 5. GRASP(General Responsibility Assignment Software Patterns)<br />High cohesion<br />Low coupling<br />
  6. 6. Low coupling<br />
  7. 7. Демонстрация<br />
  8. 8. Вспомогательные практики<br /><ul><li>Закон Деметры
  9. 9. Принцип DRY
  10. 10. Принцип «Говори, а не спрашивай»
  11. 11. Принципы SOLID
  12. 12. И прочие…</li></li></ul><li>Демонстрация<br />
  13. 13. Поднимаемся выше<br />Класс<br />Класс<br />Класс<br />Компонент<br />Система<br />
  14. 14. Принципы проектирования компонентов<br />
  15. 15. Принципы сцепленности компонентов<br /><ul><li>Reuse/Release Equivalence Principle
  16. 16. Common Reuse Principle
  17. 17. Common Closure Principle</li></li></ul><li>Acyclic Dependencies Principle<br />В графе зависимостей между компонентами не должно быть циклов<br />
  18. 18. Ациклический граф<br />Application<br />Message Box<br />Tasks<br />XML Format<br />File Formats<br />Dialogs<br />Windows<br />
  19. 19. Циклический граф<br />Application<br />Message Box<br />Tasks<br />XML Format<br />File Formats<br />Dialogs<br />Windows<br />
  20. 20. Применение DIP<br />Dialogs<br />Class A<br />Application<br />Class B<br />Application<br />A<br />Class B<br />A Server<br />
  21. 21. Введение нового компонента<br />Application<br />Message Box<br />Tasks<br />XML Format<br />New<br />File Formats<br />Dialogs<br />Windows<br />
  22. 22. Stable-Dependencies Principle<br />Зависимости должны быть направлены в сторону устойчивости<br />
  23. 23. Устойчивость<br />A<br />B<br />Устойчивый компонент<br />Неустойчивый компонент<br />
  24. 24. Метрика устойчивости<br />
  25. 25. Компоненты с разной устойчивостью<br />Неустойчивый <br />(S = 0)<br />Неустойчивый <br />(S = 0)<br />S = 0.75<br />Устойчивый <br />(S = 1)<br />Stable<br />S = 0.25<br />Flexible<br />Идеальная схема<br />Нарушение SDP<br />
  26. 26. Решение проблемы<br />Stable (S = 0.75)<br />Stable<br />U Interface (S = 1)<br />Flexible (S = 0.25)<br />Flexible<br />U<br />U<br />IU<br />V<br />V<br />
  27. 27. Stable-Abstractions Principle<br />Компонент должен быть столь же абстрактным, сколь и устойчивым<br />
  28. 28. Главная последовательность<br />A<br />(1,1)<br />(0,1)<br />d(K) = |A(K) – S(K)|<br />Зона<br />бесполезности<br />Главная последовательность<br />Зона<br />неприятностей<br />1 - S<br />(0,0)<br />(1,0)<br />
  29. 29. Применение<br />d<br />0.1<br />t<br />1.0<br />1.1<br />1.2<br />1.3<br />2.0<br />
  30. 30. NDepend<br />
  31. 31. Демонстрация<br />
  32. 32. Ресурсы<br />Инфраструктура NHibernate + UnitOfWork<br />http://code.google.com/p/nhibernate2-unitofwork/<br />Принципы OOD<br />http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod<br />NDepend<br />http://www.ndepend.com<br />OO Design Quality Metrics<br />http://www.objectmentor.com/resources/articles/oodmetrc.pdf<br />
  33. 33. Книги<br />
  34. 34. Спасибо за внимание<br />Степан Родионов<br />rodionov.stepan@gmail.com<br />

×