Download - DCI
![Page 1: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/1.jpg)
@dmytromindra
DATACONTEXTINTERACTION
Дима Миндра
Lohika, Одесса
![Page 2: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/2.jpg)
@dmytromindra
Цель – понимание DCI
![Page 3: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/3.jpg)
@dmytromindra
![Page 4: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/4.jpg)
@dmytromindra
Старые друзья проблемы
![Page 5: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/5.jpg)
@dmytromindra
Проблема №1: Завершенность
Часто, разработку программного обеспечения не удается завершить. Даже после значительных допольнительных инвестиций.
![Page 6: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/6.jpg)
@dmytromindra
Проблема №2: Дефекты
Объем работы, связанной с устранением дефектов и ошибок в «завершенном» программном продукте, необходимой для того, чтобы сделать продукт готовым к использованию часто занимает значительное количество времени. Часто это время больше чем время разработки продукта.
![Page 7: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/7.jpg)
@dmytromindra
Проблема №3: ТребованияФункциональность программного обеспечения редко соответствует требованиям конечных пользователей.
![Page 8: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/8.jpg)
@dmytromindra
Проблема №4: Поддержка
После создания программного обеспечения его практически невозможно поддерживать, т.к. способность разработчиков понять, что они написали быстро уменьшается с течением времени.
![Page 9: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/9.jpg)
@dmytromindra
Проблемы
![Page 10: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/10.jpg)
@dmytromindra
Real .NET Developer
![Page 11: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/11.jpg)
@dmytromindra
Объектно Ориентированный Анализ
![Page 12: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/12.jpg)
@dmytromindra
Вход: Проблема
Выход: концептуальная Модель (Domain objects,Use cases, Interactions, some UI mockups )
Анализ
![Page 13: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/13.jpg)
@dmytromindra
Методы OOA• Метод OOSA Шлеер-Меллора• Метод Коада• ОМТ• Метод Мартина Оделла и средства проектирования Ptech • Метод “класс-связь” • OSA• Метод SEOO• Метод BON• Fusion• OBA• Syntropy• MOSES• Метод Текселя (Texel)• Метод OORAS
![Page 14: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/14.jpg)
@dmytromindra
Проектирование
Вход: концептуальная модель Выход: архитектура(дизайн) системы
![Page 15: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/15.jpg)
@dmytromindra
OOD
SRP — 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, …..
![Page 16: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/16.jpg)
@dmytromindra
Понимание
![Page 17: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/17.jpg)
@dmytromindra
Процедурная декомпозиция
Цикл
Последовательность
Выбор
A
B C
D
C1I
I1 C2 I2
![Page 18: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/18.jpg)
@dmytromindra
Все запутано
![Page 19: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/19.jpg)
@dmytromindra
Затем мы перешли к ООП
![Page 20: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/20.jpg)
@dmytromindra
Наследование 80-го уровня
![Page 21: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/21.jpg)
@dmytromindra
Опять ?
![Page 22: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/22.jpg)
@dmytromindra
Что же делает пользователь ?Это отражено в коде ?
![Page 23: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/23.jpg)
@dmytromindra
Мы что-то теряем
Сложность
Взаимопонимание
![Page 24: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/24.jpg)
@dmytromindra
Один UseCase разнесен по многим классам.
![Page 25: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/25.jpg)
@dmytromindra
То, как представляет себе систему пользователь не совпадает с тем, как она
спроектирована
![Page 26: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/26.jpg)
@dmytromindra
Agile ценности
• Individuals and interactions• Working software• Customer collaboration• Responding to change
![Page 27: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/27.jpg)
@dmytromindra
MVC 1979
MVC улучшает восприятие
Но по-прежнему не отображает поведение
![Page 28: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/28.jpg)
@dmytromindra
ООП фокусируется на том что система из себя представляет.
При этом может быть совершенно не очевидно,что она делает и как ей пользоваться
![Page 29: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/29.jpg)
@dmytromindra
Дихотомия ООП
Лексический анализ• Существительные – классы• Глаголы - методы
![Page 30: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/30.jpg)
@dmytromindra
Объектное мышление
• Мы приобретаем объектное мышление от языка программирования.
• Мы ограничиваем свое восприятие ООП.
![Page 31: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/31.jpg)
@dmytromindra
DCI
![Page 32: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/32.jpg)
@dmytromindra
Кто виноват ?
Trygve Mikkjel Heyerdahl ReenskaugJim Coplien
![Page 33: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/33.jpg)
@dmytromindra
Как пользователь представляет себе это действие ?
![Page 34: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/34.jpg)
@dmytromindra
Ментальная Модель пользователя
Данные Роли
Взаимодействия
![Page 35: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/35.jpg)
@dmytromindra
Простой пример
Transfer Money
User
Берем один счет, затем берем другой счет, определяем сумму перевода,переводим деньги.
Умный
пользователь
![Page 36: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/36.jpg)
@dmytromindra
Данные (Data)
Account
Sav ingsAccountCheckingAccount
![Page 37: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/37.jpg)
@dmytromindra
Роли (Interaction)«interface»
TransferMoneySink«interface»
TransferMoneySource
Пассивные (Methodless)
«interface»TransferMoneySink
«interface»TransferMoneySource
TransferMoneySourceTrait
+ TransferTo() : void
Активные (methodful)
Не натуральная ко
жа,
а чистая си
нтетика
(Pure Fabric
ation)
![Page 38: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/38.jpg)
@dmytromindra
Контекст (Context)
Берем один счет, Берем другой счет, определяем сумму перевода,переводим деньги.
«interface»TransferMoneySink
«interface»TransferMoneySource
TransferMoneySourceTrait
+ TransferTo() : void
TransferMoneyContext
«Property»+ TransferMoneySource+ TransferMoneySink+ Ammount: int
+ Execute() : void
![Page 39: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/39.jpg)
@dmytromindra
DCI & MVC вместе
![Page 40: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/40.jpg)
@dmytromindra
DCI – это еще одна точка зрения
![Page 41: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/41.jpg)
@dmytromindra
Комбинируя подходы мы получаем архитектуру системы
MVC
DCI
Domain Model
Концептуальная модель проектирование
![Page 42: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/42.jpg)
@dmytromindra
Время действовать(показывать код)
![Page 43: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/43.jpg)
@dmytromindra
Как насчет TDD
![Page 44: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/44.jpg)
@dmytromindra
SOLID-но ?
![Page 45: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/45.jpg)
@dmytromindra
![Page 46: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/46.jpg)
@dmytromindra
![Page 47: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/47.jpg)
@dmytromindra
![Page 48: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/48.jpg)
@dmytromindra
![Page 49: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/49.jpg)
@dmytromindra
![Page 50: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/50.jpg)
@dmytromindra
Приправим контрактами
![Page 51: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/51.jpg)
@dmytromindra
Do try this ;)
![Page 52: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/52.jpg)
@dmytromindra
Links and References
http://www.artima.com/articles/dci_vision.html
http://www.leansoftwarearchitecture.com/
![Page 53: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/53.jpg)
@dmytromindra
Source Code
https://github.com/DmytroMindra/DCI-Simple-Sample
![Page 54: DCI](https://reader031.vdocument.in/reader031/viewer/2022020718/54810740b4795937578b481d/html5/thumbnails/54.jpg)
@dmytromindra
Спасибо !