CiklumNETSat10122011:DmitriyMindra-DCI

360 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

CiklumNETSat10122011:DmitriyMindra-DCI

  1. 1. DATA CONTEXT INTERACTION Дима Миндра Lohika, Одесса@dmytromindra
  2. 2. Цель – понимание DCI@dmytromindra
  3. 3. @dmytromindra
  4. 4. Старые друзья проблемы@dmytromindra
  5. 5. Проблема №1: Завершенность Часто, разработку программного обеспечения не удается завершить. Даже после значительных допольнительных инвестиций.@dmytromindra
  6. 6. Проблема №2: Дефекты Объем работы, связанной с устранением дефектов и ошибок в «завершенном» программном продукте, необходимой для того, чтобы сделать продукт готовым к использованию часто занимает значительное количество времени. Часто это время больше чем время разработки продукта.@dmytromindra
  7. 7. Проблема №3: Требования Функциональность программного обеспечения редко соответствует требованиям конечных пользователей.@dmytromindra
  8. 8. Проблема №4: Поддержка После создания программного обеспечения его практически невозможно поддерживать, т.к. способность разработчиков понять, что они написали быстро уменьшается с течением времени.@dmytromindra
  9. 9. Проблемы@dmytromindra
  10. 10. Real .NET Developer@dmytromindra
  11. 11. Объектно Ориентированный Анализ@dmytromindra
  12. 12. Выход:Анализ концептуальная Модель (Domain objects, Use cases, Interactions, Вход: Проблема some UI mockups )@dmytromindra
  13. 13. Методы OOA• Метод OOSA Шлеер-Меллора• Метод Коада• ОМТ• Метод Мартина Оделла и средства проектирования Ptech• Метод “класс-связь”• OSA• Метод SEOO• Метод BON• Fusion• OBA• Syntropy• MOSES• Метод Текселя (Texel)• Метод OORAS@dmytromindra
  14. 14. Проектирование Выход: архитектура(дизайн) Вход: концептуальная модель системы@dmytromindra
  15. 15. OODSRP — The Single Responsibility PrincipleOCP — The Open Closed PrincipleLSP — The Liskov Substitution PrincipleISP — The Interface Segregation PrincipleDIP — The Dependency Inversion PrincipleREP — The Reuse Release Equivalency PrincipleCCP — The Common Closure PrincipleCRP — The Common Reuse PrincipleADP — The Acyclic Dependencies PrincipleSDP — The Stable Dependencies PrincipleSAP — The Stable Abstractions Principle А также DDD, Pattern Language, MVC, CQRS, Event Driven, SOA, …..@dmytromindra
  16. 16. Понимание@dmytromindra
  17. 17. Процедурная декомпозиция A Последовательность B C D Цикл Выбор C1 I1 C2 I2 I@dmytromindra
  18. 18. Все запутано@dmytromindra
  19. 19. Затем мы перешли к ООП@dmytromindra
  20. 20. Наследование 80-го уровня@dmytromindra
  21. 21. Опять ?@dmytromindra
  22. 22. Что же делает пользователь ? Это отражено в коде ?@dmytromindra
  23. 23. Мы что-то теряем@dmytromindra
  24. 24. Один UseCase разнесен по многим классам.@dmytromindra
  25. 25. То, как представляет себе систему пользователь не совпадает с тем, как она спроектирована@dmytromindra
  26. 26. Agile ценности• Individuals and interactions• Working software• Customer collaboration• Responding to change@dmytromindra
  27. 27. MVC 1979MVC улучшает восприятие Но по-прежнему не отображает поведение@dmytromindra
  28. 28. ООП фокусируется на том что система из себя представляет. При этом может быть совершенно не очевидно, что она делает и как ей пользоваться@dmytromindra
  29. 29. Дихотомия ООПЛексический анализ• Существительные – классы• Глаголы - методы@dmytromindra
  30. 30. Объектное мышление• Мы приобретаем объектное мышление от языка программирования.• Мы ограничиваем свое восприятие ООП.@dmytromindra
  31. 31. DCI@dmytromindra
  32. 32. Кто виноват ? Jim Coplien Trygve Mikkjel Heyerdahl Reenskaug@dmytromindra
  33. 33. Как пользователь представляет себе это действие ?@dmytromindra
  34. 34. Ментальная Модель пользователя Данные Роли Взаимодействия@dmytromindra
  35. 35. Простой пример Transfer Money User Берем один счет, затем берем другой счет, определяем сумму перевода, переводим деньги.@dmytromindra
  36. 36. Данные (Data) Account CheckingAccount Sav ingsAccount@dmytromindra
  37. 37. Роли (Interaction) Пассивные (Methodless) «interface» «interface» TransferMoneySink TransferMoneySource Активные (methodful) TransferMoneySourceTrait + TransferTo() : void «interface» «interface» TransferMoneySink TransferMoneySource@dmytromindra
  38. 38. Контекст (Context) «interface» TransferMoneySink TransferMoneyContextБерем один счет, «Property» TransferMoneySourceTraitБерем другой счет, + TransferMoneySource + TransferMoneySink + TransferTo() : void + Ammount: intопределяем сумму + Execute() : voidперевода,переводим деньги. «interface» TransferMoneySource @dmytromindra
  39. 39. DCI & MVC вместе@dmytromindra
  40. 40. DCI – это еще одна точка зрения@dmytromindra
  41. 41. Комбинируя подходы мы получаем архитектуру системы MVC Концептуальная DCI проектирование модель Domain Model@dmytromindra
  42. 42. Время действовать (показывать код)@dmytromindra
  43. 43. Как насчет TDD@dmytromindra
  44. 44. SOLID-но ?@dmytromindra
  45. 45. @dmytromindra
  46. 46. @dmytromindra
  47. 47. @dmytromindra
  48. 48. @dmytromindra
  49. 49. @dmytromindra
  50. 50. Приправим контрактами@dmytromindra
  51. 51. Do try this ;)@dmytromindra
  52. 52. Links and Referenceshttp://www.artima.com/articles/dci_vision.htmlhttp://www.leansoftwarearchitecture.com/@dmytromindra
  53. 53. Source Codehttps://github.com/DmytroMindra/DCI-Simple- Sample@dmytromindra
  54. 54. @dmytromindra

×