Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DCI

1,215 views

Published on

Published in: Technology
  • Be the first to comment

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

×