SlideShare une entreprise Scribd logo
1  sur  54
DATA
  CONTEXT
  INTERACTION

                 Дима Миндра
                Lohika, Одесса

@dmytromindra
Цель – понимание DCI




@dmytromindra
@dmytromindra
Старые друзья проблемы




@dmytromindra
Проблема №1: Завершенность
   Часто, разработку программного
   обеспечения не удается завершить.
   Даже после значительных
   допольнительных инвестиций.




@dmytromindra
Проблема №2: Дефекты
 Объем работы, связанной с устранением дефектов
 и ошибок в «завершенном» программном
 продукте, необходимой для того, чтобы сделать
 продукт готовым к использованию часто занимает
 значительное количество времени. Часто это время
 больше чем время разработки продукта.




@dmytromindra
Проблема №3: Требования
   Функциональность программного
   обеспечения редко соответствует требованиям
   конечных пользователей.




@dmytromindra
Проблема №4: Поддержка
   После создания программного обеспечения его
   практически невозможно поддерживать, т.к.
   способность разработчиков понять, что они
   написали быстро уменьшается с течением
   времени.




@dmytromindra
Проблемы




@dmytromindra
Real .NET Developer




@dmytromindra
Объектно
                Ориентированный
                Анализ
@dmytromindra
Выход:
Анализ              концептуальная
                    Модель (Domain objects,
                    Use cases, Interactions,
   Вход: Проблема   some UI mockups )




@dmytromindra
Методы OOA
•   Метод OOSA Шлеер-Меллора
•   Метод Коада
•   ОМТ
•   Метод Мартина Оделла и средства проектирования Ptech
•   Метод “класс-связь”
•   OSA
•   Метод SEOO
•   Метод BON
•   Fusion
•   OBA
•   Syntropy
•   MOSES
•   Метод Текселя (Texel)
•   Метод OORAS

@dmytromindra
Проектирование

                                    Выход: архитектура(дизайн)
      Вход: концептуальная модель
                                          системы




@dmytromindra
OOD
SRP — The Single Responsibility Principle
OCP — The Open Closed Principle
LSP — The Liskov Substitution Principle
ISP — The Interface Segregation Principle
DIP — The Dependency Inversion Principle
REP — The Reuse Release Equivalency Principle
CCP — The Common Closure Principle
CRP — The Common Reuse Principle
ADP — The Acyclic Dependencies Principle
SDP — The Stable Dependencies Principle
SAP — The Stable Abstractions Principle
                А также DDD, Pattern Language, MVC, CQRS, Event Driven, SOA, …..
@dmytromindra
Понимани
е




@dmytromindra
Процедурная декомпозиция

                                     A

                           Последовательность

                 B                               C
                                 D
                Цикл                            Выбор


         C1                              I1      C2     I2
                       I




@dmytromindra
Все запутано




@dmytromindra
Затем мы перешли к ООП




@dmytromindra
Наследование 80-го уровня




@dmytromindra
Опять ?




@dmytromindra
Что же делает пользователь ?
                  Это отражено в коде ?




@dmytromindra
Мы что-то теряем




@dmytromindra
Один UseCase разнесен по
           многим классам.




@dmytromindra
То, как представляет себе систему
 пользователь не совпадает с тем, как она
              спроектирована




@dmytromindra
Agile ценности
•   Individuals and interactions
•   Working software
•   Customer collaboration
•   Responding to change




@dmytromindra
MVC 1979
MVC улучшает восприятие




   Но по-прежнему не отображает поведение

@dmytromindra
ООП фокусируется на том что
   система из себя представляет.




                При этом может быть совершенно не очевидно,
                что она делает и как ей пользоваться
@dmytromindra
Дихотомия ООП
Лексический анализ
• Существительные – классы
• Глаголы - методы




@dmytromindra
Объектное мышление
• Мы приобретаем объектное мышление от
  языка программирования.

• Мы ограничиваем свое восприятие ООП.




@dmytromindra
DCI




@dmytromindra
Кто виноват ?




   Jim Coplien         Trygve Mikkjel Heyerdahl Reenskaug




@dmytromindra
Как пользователь представляет
        себе это действие ?




@dmytromindra
Ментальная Модель
                  пользователя

    Данные                       Роли




                     Взаимодействия
@dmytromindra
Простой пример

                         Transfer Money




                  User




 Берем один счет,
 затем берем другой счет,
 определяем сумму перевода,
 переводим деньги.
@dmytromindra
Данные (Data)

                                  Account




                CheckingAccount             Sav ingsAccount




@dmytromindra
Роли (Interaction)
     Пассивные (Methodless)
          «interface»                       «interface»
      TransferMoneySink                TransferMoneySource




      Активные (methodful)
                    TransferMoneySourceTrait

                     +    TransferTo() : void




          «interface»                                «interface»
      TransferMoneySink                         TransferMoneySource




@dmytromindra
Контекст (Context)
                                                         «interface»
                                                     TransferMoneySink




                             TransferMoneyContext

Берем один счет,            «Property»                TransferMoneySourceTrait


Берем другой счет,
                            + TransferMoneySource
                            + TransferMoneySink       +   TransferTo() : void
                            + Ammount: int

определяем сумму            +   Execute() : void


перевода,
переводим деньги.                                        «interface»
                                                    TransferMoneySource




 @dmytromindra
DCI & MVC вместе




@dmytromindra
DCI – это еще одна точка зрения




@dmytromindra
Комбинируя подходы мы
   получаем архитектуру системы


                                       MVC



 Концептуальная                        DCI
                  проектирование
     модель




                                   Domain Model




@dmytromindra
Время действовать
                 (показывать код)
@dmytromindra
Как насчет TDD




@dmytromindra
SOLID-но ?




@dmytromindra
@dmytromindra
@dmytromindra
@dmytromindra
@dmytromindra
@dmytromindra
Приправим контрактами




@dmytromindra
Do try this ;)




@dmytromindra
Links and References
http://www.artima.com/articles/dci_vision.html

http://www.leansoftwarearchitecture.com/




@dmytromindra
Source Code
https://github.com/DmytroMindra/DCI-Simple-
  Sample




@dmytromindra
@dmytromindra

Contenu connexe

Similaire à CiklumNETSat10122011:DmitriyMindra-DCI

Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложенийAndrew Mayorov
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDKrivoy Rog IT Community
 
IT Brunch - 12.11.2011 - Myths about Design
IT Brunch - 12.11.2011 - Myths about DesignIT Brunch - 12.11.2011 - Myths about Design
IT Brunch - 12.11.2011 - Myths about DesignDmytro Mindra
 
Powershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systemsPowershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systemsAndrey Vernigora
 
Lean Software Development
Lean Software DevelopmentLean Software Development
Lean Software DevelopmentDmytro Mindra
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Dmytro Mindra
 
Хто створює програмне забезпечення? Огляд сучасних ІТ-професІй
Хто створює програмне забезпечення? Огляд сучасних ІТ-професІйХто створює програмне забезпечення? Огляд сучасних ІТ-професІй
Хто створює програмне забезпечення? Огляд сучасних ІТ-професІйLutskITCluster
 
Software craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакцииSoftware craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакцииPavel Veinik
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Yauheni Akhotnikau
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
Compilable Specifications - XPDays Ukraine 2012
Compilable Specifications - XPDays Ukraine 2012Compilable Specifications - XPDays Ukraine 2012
Compilable Specifications - XPDays Ukraine 2012Dmytro Mindra
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"Roman Dvornov
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...it-people
 
Как это работает: DLR
Как это работает: DLRКак это работает: DLR
Как это работает: DLRMikhail Shcherbakov
 

Similaire à CiklumNETSat10122011:DmitriyMindra-DCI (20)

Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложений
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
IT Brunch - 12.11.2011 - Myths about Design
IT Brunch - 12.11.2011 - Myths about DesignIT Brunch - 12.11.2011 - Myths about Design
IT Brunch - 12.11.2011 - Myths about Design
 
Powershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systemsPowershell, Graphs and more. Or how to find dependencies in your systems
Powershell, Graphs and more. Or how to find dependencies in your systems
 
Lean Software Development
Lean Software DevelopmentLean Software Development
Lean Software Development
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012 Windows Azure & NodeJS Microsoft SWIT 2012
Windows Azure & NodeJS Microsoft SWIT 2012
 
Хто створює програмне забезпечення? Огляд сучасних ІТ-професІй
Хто створює програмне забезпечення? Огляд сучасних ІТ-професІйХто створює програмне забезпечення? Огляд сучасних ІТ-професІй
Хто створює програмне забезпечення? Огляд сучасних ІТ-професІй
 
5678
56785678
5678
 
Domain Context Integration
Domain Context IntegrationDomain Context Integration
Domain Context Integration
 
Software craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакцииSoftware craftsmanship 10: распределенные транзакции
Software craftsmanship 10: распределенные транзакции
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
C# vs C++
C# vs C++C# vs C++
C# vs C++
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Compilable Specifications - XPDays Ukraine 2012
Compilable Specifications - XPDays Ukraine 2012Compilable Specifications - XPDays Ukraine 2012
Compilable Specifications - XPDays Ukraine 2012
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
 
Бизнес и ИТ-эволюция
Бизнес и ИТ-эволюцияБизнес и ИТ-эволюция
Бизнес и ИТ-эволюция
 
Как это работает: DLR
Как это работает: DLRКак это работает: DLR
Как это работает: DLR
 
Lyamin ya.roundtable2014
Lyamin ya.roundtable2014Lyamin ya.roundtable2014
Lyamin ya.roundtable2014
 

Plus de Ciklum

Aleksandr_Butenko_Mobile_Development
Aleksandr_Butenko_Mobile_DevelopmentAleksandr_Butenko_Mobile_Development
Aleksandr_Butenko_Mobile_DevelopmentCiklum
 
Pavel_Kravchenko_Mobile Development
Pavel_Kravchenko_Mobile DevelopmentPavel_Kravchenko_Mobile Development
Pavel_Kravchenko_Mobile DevelopmentCiklum
 
Aleksey_Demedetskiy_Jenkins
Aleksey_Demedetskiy_JenkinsAleksey_Demedetskiy_Jenkins
Aleksey_Demedetskiy_JenkinsCiklum
 
Speakers' corner_Kharkov
Speakers' corner_KharkovSpeakers' corner_Kharkov
Speakers' corner_KharkovCiklum
 
Speakers' corner
Speakers' cornerSpeakers' corner
Speakers' cornerCiklum
 
Mikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsMikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsCiklum
 
Dmitriy Pasko_NuGet - package management for .NET
Dmitriy Pasko_NuGet - package management for .NETDmitriy Pasko_NuGet - package management for .NET
Dmitriy Pasko_NuGet - package management for .NETCiklum
 
Anders Sorensen_Optimizing development in an offshore context
Anders Sorensen_Optimizing development in an offshore contextAnders Sorensen_Optimizing development in an offshore context
Anders Sorensen_Optimizing development in an offshore contextCiklum
 

Plus de Ciklum (8)

Aleksandr_Butenko_Mobile_Development
Aleksandr_Butenko_Mobile_DevelopmentAleksandr_Butenko_Mobile_Development
Aleksandr_Butenko_Mobile_Development
 
Pavel_Kravchenko_Mobile Development
Pavel_Kravchenko_Mobile DevelopmentPavel_Kravchenko_Mobile Development
Pavel_Kravchenko_Mobile Development
 
Aleksey_Demedetskiy_Jenkins
Aleksey_Demedetskiy_JenkinsAleksey_Demedetskiy_Jenkins
Aleksey_Demedetskiy_Jenkins
 
Speakers' corner_Kharkov
Speakers' corner_KharkovSpeakers' corner_Kharkov
Speakers' corner_Kharkov
 
Speakers' corner
Speakers' cornerSpeakers' corner
Speakers' corner
 
Mikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsMikhail Valkov_Antipatterns
Mikhail Valkov_Antipatterns
 
Dmitriy Pasko_NuGet - package management for .NET
Dmitriy Pasko_NuGet - package management for .NETDmitriy Pasko_NuGet - package management for .NET
Dmitriy Pasko_NuGet - package management for .NET
 
Anders Sorensen_Optimizing development in an offshore context
Anders Sorensen_Optimizing development in an offshore contextAnders Sorensen_Optimizing development in an offshore context
Anders Sorensen_Optimizing development in an offshore context
 

CiklumNETSat10122011:DmitriyMindra-DCI