Agile Архитектура

                          Дмитрий Миндра
                              Lohika

@dmytromindra   #xpdays
Что я обещал
   Я обещал поделиться своим представлением об архитектуре и
   проектировании в Agile. Многие популярные методологии не
   описывают архитектурные практики. Некоторые команды,
   работающие по гибким методологиям не уделяют достаточно
   внимания проектированию. Но проектирование было и остается
   той важной основной, на которой строится любое программное
   обеспечение. Проектирование – это принятие решений.
   Традиционный подход утверждает, что эти решения должны быть
   приняты в самом начале. Гибкий подход заключается в том, что
   решения должны приниматься тогда, когда они действительно
   необходимы. Таким образом с развитием проекта гибкая
   архитектура эволюционирует. И эта гибкость дает больше
   возможностей для адаптации к изменениям. В индустрии
   разработки программного обеспечения нет серебряных пуль. Я
   постараюсь развеять некоторые мифы и познакомить
   слушателей с проверенными практиками.



@dmytromindra   #xpdays
Разработка ПО – это просто !




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




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




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




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




@dmytromindra   #xpdays
@dmytromindra   #xpdays
Программист или инженер ?




@dmytromindra   #xpdays   http://www.codethinked.com/the-programmer-dress-code
Программист 1.0


     Спецификация                                Программный продукт




        Спецификация на входе – программное обеспечение на выходе.
        Изменения в спецификациях не любит. Расценивает как угрозу.
        Старается всячески избегать изменений.

@dmytromindra   #xpdays
Программист 2.0




        Программист 2.0 и клиенат 2.0 учатся понимать друг друга.
        Программист 2.0 все еще боится изменений, поэтому приписывет к
        каждой версии продукта BETA.
@dmytromindra   #xpdays
Программист 3.0




        Понимает клиента, его бизнес, разделяет ценности.
        Всегда готов к изменениям. Понимает и принимает их необходимость.
        Стремится делать рабочее и готовое к использованию ПО.
@dmytromindra   #xpdays
Agile методологии говорят о
                 людях




@dmytromindra   #xpdays
Миф: Архитектор




 Сидит отдельно. Все решения принимает сам.
 Занимается асоциальным проектированием.
 Охраняет свою территорию.
@dmytromindra   #xpdays
Agile Архитектура
   Ваш менеджер
   вне всяких
   сомнений
   будет рад
   Agile
   архитектуре



@dmytromindra   #xpdays
Agile Architecture
                         Как это ?




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




@dmytromindra   #xpdays
Что такое архитектура и
              проектирование?

   В наиболее успешных программных
   проектах, опытные разработчики
   обладают общим пониманием
   структуры системы. Это общее
   понимание называется "архитектура".




@dmytromindra   #xpdays
Более официальное, но все еще
            хорошее определение.

   Архитектура является основной
   организации системы, воплощенной в ее
   компонентах, их отношениях друг к другу
   и к окружающей среде, и принципы,
   определяющие ее дизайн и эволюцию.
                              [IEEE 1471]



@dmytromindra   #xpdays
Характеристики Качества
                      Correctness       Easy of use

                          Robustness    Functionality

                      Extendibility      Timeliness

                          Reusability   Verifiability

                     Compatibility        Integrity

                          Efficiency    Reparability

                          Portability    Economy


@dmytromindra   #xpdays
Самые важные характеристики



                  Корректность    Усточивость

                 Расширяемость    Возможность
                                   повторного
                                 использования




@dmytromindra   #xpdays
Наш враг сложность




@dmytromindra   #xpdays
Враги архитектуры



          Хрупкость          Вязкость




                      Неподвижность     Жесткость
@dmytromindra   #xpdays
Масштабируемость




     Больше серверов


                            Больше людей


@dmytromindra   #xpdays
Coupling (Сцепление)
   Сцепление классов, когда изменения в
   одном могут повлиять на другой и
   наоборот. К сожалению полностью
   избавиться от сцепления невозможно.




@dmytromindra   #xpdays
Cohesion (Сплоченность)
   Сплоченность классов, по своей
   ответственности. Т.е. классы,
   выполнябщие похожие действия
   сгруппированы в одном и том же модуле.




@dmytromindra   #xpdays
Scocialization




@dmytromindra   #xpdays
Latency
   Задержка – это время, которое должно
   пройти прежде чем первая
   функциональность увидит свет




@dmytromindra   #xpdays
Throughput
   Пропускная способность – количесво
   функциональности, которое можно
   реализовать за определенное время.




@dmytromindra   #xpdays
Все всегда начинается с проблемы




@dmytromindra   #xpdays
Объектно
                          Ориентированный
                          Анализ
@dmytromindra   #xpdays
Анализ


                          Выход:
                          концептуальная
     Вход:                Модель (Domain objects,
     Проблема             Use cases, Interactions,
                          some UI mockups )




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


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


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




@dmytromindra   #xpdays
Принципы и инструменты 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
@dmytromindra   #xpdays
А также
   •   Design Patterns
   •   Domain Driven Design
   •   CQRS
   •   Event Sourcing
   •   MVC
   •   DCI
   •   SOA
   •   …

@dmytromindra   #xpdays
Кажется, что можно все
                спланировать ?




  Подробнее в книге Agile Samurai ;)
@dmytromindra #xpdays
Big Upfront Design (BUFD)




@dmytromindra   #xpdays
No Upfront Design (NUFD)




@dmytromindra   #xpdays
Миф о рефакторинг
   Ничего не будем делать заранее, сделаем
   как получится, затем сделаем
   рефакторинг и будет архитектура.




@dmytromindra   #xpdays
TDD и Архитектура
     TDD укажет вам на проблемы в проектировании. Но
     если вы не задали основные направления для движения
     и эволюции, дизайн и архитектура не получатся.




@dmytromindra   #xpdays
UnixWay от Кента Бека
   • Make it work
       – ( Сделай что-то рабочее)
   • Make it right
       – ( Сделай рабочее правильным)
   • Make it fast
       – (Сделай правильное быстрым)




@dmytromindra   #xpdays
Инструменты
   А также принципы и практики




@dmytromindra   #xpdays
Парное программирование
   • Не программируй один. Найди себе
     друга.




@dmytromindra   #xpdays
Ревью кода
   Тимлид сурово смотрит в код ...




@dmytromindra   #xpdays
DDD




@dmytromindra   #xpdays
CQRS




@dmytromindra   #xpdays
Event Sourcing
  Состояние доменного объекта переносится в событие. Система хорошо
  распараллеливается.




@dmytromindra   #xpdays
Design Patterns




@dmytromindra   #xpdays
ООП
   • ООП – это как в C#
   • ООП – это как в PHP
   • ООП – это как в Java




@dmytromindra   #xpdays
Пользователь




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




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




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




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




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

@dmytromindra   #xpdays
DCI




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




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

       Данные                              Роли




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

                                 Transfer Money




                          User




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

                                            Account




                          CheckingAccount             Sav ingsAccount




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




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

                        +    TransferTo() : void




             «interface»                                «interface»
         TransferMoneySink                         TransferMoneySource




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




 Берем один счет,
                              TransferMoneyContext

                              «Property»                TransferMoneySourceTrait

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


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


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




@dmytromindra   #xpdays
DCI & MVC вместе




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




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


                                                    MVC



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




                                                Domain Model




@dmytromindra        #xpdays
Do try this ;)




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

   http://www.leansoftwarearchitecture.com/




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




@dmytromindra   #xpdays
Итоги
   • В проектировании очень важны знания
   • В проектировании очень важен опыт
   • В проектировании очень важно
     понимание
   • Agile архитектура – это люди
   • DCI стоит попробовать дома
   • Попробуйте Lean


@dmytromindra   #xpdays
В заключение
          Программное обеспечение не ограничено физикой,
      как здания. Оно ограничено
      фантазией, дизайном, организацией. Короче говоря, оно
      ограничено свойствами людей, а
      не свойства мира. "Мы встретили врага, и этот враг мы
      сами".
          -- Мартин Фаулер




@dmytromindra   #xpdays
Программист 3.0




@dmytromindra   #xpdays
Спасибо!


@dmytromindra   #xpdays

More Related Content

PPTX
Построение гибкого процесса разработки (4-5 курсы)
PPTX
Построение гибкого процесса разработки (3 курс)
PDF
Системный анализ в процессе разработки ПО
PDF
Project Manager - Глупая идея
PPT
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
PPT
Афинский акрополь
PPTX
CiklumNETSat10122011:DmitriyMindra-DCI
PPTX
Построение гибкого процесса разработки (4-5 курсы)
Построение гибкого процесса разработки (3 курс)
Системный анализ в процессе разработки ПО
Project Manager - Глупая идея
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
Афинский акрополь
CiklumNETSat10122011:DmitriyMindra-DCI

Similar to Agile architecture (20)

PPTX
CiklumNETSat10122011:DMitriyMindra-DCI
PPT
2013-04-06 01 Максим Юнусов. Архитектура в agile-проекте
PPT
Архитектура в Agile проекте
PDF
Обзор Feature-Driven Development и Domain-Driven Design
PDF
DDD: проблемы и решения при отражении модели предметной области в код
PDF
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
PDF
Проектирование больших ИС в Agile (статья)
PPTX
Практические аспекты разработки ПО #3
PPT
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
PPT
Design Rules And Principles
PDF
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...
PDF
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
ODP
Refactoring
PDF
Проектирование Программных Систем. Лекция 01
PPTX
Как выбрать для проекта практики проектирования и работы с требованиями
PDF
Как выбрать для проекта практики проектирования и работы с требованиями
PDF
Choose method for requirements Tsepkov Analyst Days-2017
PPTX
DDD-secon-2014-tsepkov
PDF
DDD Workshop
CiklumNETSat10122011:DMitriyMindra-DCI
2013-04-06 01 Максим Юнусов. Архитектура в agile-проекте
Архитектура в Agile проекте
Обзор Feature-Driven Development и Domain-Driven Design
DDD: проблемы и решения при отражении модели предметной области в код
INFOSYSTEMS. How to Measure Software Architecture [1.01, RUS]
Проектирование больших ИС в Agile (статья)
Практические аспекты разработки ПО #3
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Design Rules And Principles
Александр Сербул. Прикладное XP в «1С-Битрикс»: как развивать продукт более 1...
2013-03-02 02 Дмитрий Пашкевич. Код на стероидах
Refactoring
Проектирование Программных Систем. Лекция 01
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
Choose method for requirements Tsepkov Analyst Days-2017
DDD-secon-2014-tsepkov
DDD Workshop
Ad

More from Dmytro Mindra (20)

PDF
Introduction to Value Planning for iHUB
PDF
Mastering public speaking skills
PPTX
XP Days Ukraine 2014 - Refactoring legacy code
PPTX
Odessa .NET User Group - Kinect v2
PDF
Building Windows Phone 8 Games With Unity3d
PDF
IT Brunch - SpecFlow and Gherkin by Example
PDF
Odessa Pluralsight Study Group 28.11.2012
PDF
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
PDF
Compilable Specifications - XPDays Ukraine 2012
PPTX
NetworkUA - 2012 - Introduction TypeScript
PPTX
Ciklum .NET Saturday - Introduction to TypeScript
PPTX
Lean Lego Game for Agileee 2012
PPTX
Lohika .Net Day - What's new in Windows Azure
PPTX
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
PPTX
Windows Azure & NodeJS Microsoft SWIT 2012
PPTX
Lean Software Development
PPTX
Craftsmanship - XP Days 2011
PDF
Odessa .NET User Group - 10.11.2011 - Applied Code Generation
PDF
IT Brunch - 12.11.2011 - Myths about Design
PDF
NetWork - 15.10.2011 - Applied code generation in .NET
Introduction to Value Planning for iHUB
Mastering public speaking skills
XP Days Ukraine 2014 - Refactoring legacy code
Odessa .NET User Group - Kinect v2
Building Windows Phone 8 Games With Unity3d
IT Brunch - SpecFlow and Gherkin by Example
Odessa Pluralsight Study Group 28.11.2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Compilable Specifications - XPDays Ukraine 2012
NetworkUA - 2012 - Introduction TypeScript
Ciklum .NET Saturday - Introduction to TypeScript
Lean Lego Game for Agileee 2012
Lohika .Net Day - What's new in Windows Azure
Web В РЕАЛЬНОМ ВРЕМЕНИ С Node.js - AgileBaseCamp - 2012
Windows Azure & NodeJS Microsoft SWIT 2012
Lean Software Development
Craftsmanship - XP Days 2011
Odessa .NET User Group - 10.11.2011 - Applied Code Generation
IT Brunch - 12.11.2011 - Myths about Design
NetWork - 15.10.2011 - Applied code generation in .NET
Ad

Agile architecture

  • 1. Agile Архитектура Дмитрий Миндра Lohika @dmytromindra #xpdays
  • 2. Что я обещал Я обещал поделиться своим представлением об архитектуре и проектировании в Agile. Многие популярные методологии не описывают архитектурные практики. Некоторые команды, работающие по гибким методологиям не уделяют достаточно внимания проектированию. Но проектирование было и остается той важной основной, на которой строится любое программное обеспечение. Проектирование – это принятие решений. Традиционный подход утверждает, что эти решения должны быть приняты в самом начале. Гибкий подход заключается в том, что решения должны приниматься тогда, когда они действительно необходимы. Таким образом с развитием проекта гибкая архитектура эволюционирует. И эта гибкость дает больше возможностей для адаптации к изменениям. В индустрии разработки программного обеспечения нет серебряных пуль. Я постараюсь развеять некоторые мифы и познакомить слушателей с проверенными практиками. @dmytromindra #xpdays
  • 3. Разработка ПО – это просто ! @dmytromindra #xpdays
  • 4. Проблема №1: Завершенность Часто, разработку программного обеспечения не удается завершить. Даже после значительных допольнительных инвестиций. @dmytromindra #xpdays
  • 5. Проблема №2: Дефекты Объем работы, связанной с устранением дефектов и ошибок в «завершенном» программном продукте, необходимой для того, чтобы сделать продукт готовым к использованию часто занимает значительное количество времени. Часто это время больше чем время разработки продукта. @dmytromindra #xpdays
  • 6. Проблема №3: Требования Функциональность программного обеспечения редко соответствует требованиям конечных пользователей. @dmytromindra #xpdays
  • 7. Проблема №4: Поддержка После создания программного обеспечения его практически невозможно поддерживать, т.к. способность разработчиков понять, что они написали быстро уменьшается с течением времени. @dmytromindra #xpdays
  • 8. @dmytromindra #xpdays
  • 9. Программист или инженер ? @dmytromindra #xpdays http://www.codethinked.com/the-programmer-dress-code
  • 10. Программист 1.0 Спецификация Программный продукт Спецификация на входе – программное обеспечение на выходе. Изменения в спецификациях не любит. Расценивает как угрозу. Старается всячески избегать изменений. @dmytromindra #xpdays
  • 11. Программист 2.0 Программист 2.0 и клиенат 2.0 учатся понимать друг друга. Программист 2.0 все еще боится изменений, поэтому приписывет к каждой версии продукта BETA. @dmytromindra #xpdays
  • 12. Программист 3.0 Понимает клиента, его бизнес, разделяет ценности. Всегда готов к изменениям. Понимает и принимает их необходимость. Стремится делать рабочее и готовое к использованию ПО. @dmytromindra #xpdays
  • 13. Agile методологии говорят о людях @dmytromindra #xpdays
  • 14. Миф: Архитектор Сидит отдельно. Все решения принимает сам. Занимается асоциальным проектированием. Охраняет свою территорию. @dmytromindra #xpdays
  • 15. Agile Архитектура Ваш менеджер вне всяких сомнений будет рад Agile архитектуре @dmytromindra #xpdays
  • 16. Agile Architecture Как это ? @dmytromindra #xpdays
  • 17. Agile ценности • Individuals and interactions • Working software • Customer collaboration • Responding to change @dmytromindra #xpdays
  • 18. Что такое архитектура и проектирование? В наиболее успешных программных проектах, опытные разработчики обладают общим пониманием структуры системы. Это общее понимание называется "архитектура". @dmytromindra #xpdays
  • 19. Более официальное, но все еще хорошее определение. Архитектура является основной организации системы, воплощенной в ее компонентах, их отношениях друг к другу и к окружающей среде, и принципы, определяющие ее дизайн и эволюцию. [IEEE 1471] @dmytromindra #xpdays
  • 20. Характеристики Качества Correctness Easy of use Robustness Functionality Extendibility Timeliness Reusability Verifiability Compatibility Integrity Efficiency Reparability Portability Economy @dmytromindra #xpdays
  • 21. Самые важные характеристики Корректность Усточивость Расширяемость Возможность повторного использования @dmytromindra #xpdays
  • 23. Враги архитектуры Хрупкость Вязкость Неподвижность Жесткость @dmytromindra #xpdays
  • 24. Масштабируемость Больше серверов Больше людей @dmytromindra #xpdays
  • 25. Coupling (Сцепление) Сцепление классов, когда изменения в одном могут повлиять на другой и наоборот. К сожалению полностью избавиться от сцепления невозможно. @dmytromindra #xpdays
  • 26. Cohesion (Сплоченность) Сплоченность классов, по своей ответственности. Т.е. классы, выполнябщие похожие действия сгруппированы в одном и том же модуле. @dmytromindra #xpdays
  • 28. Latency Задержка – это время, которое должно пройти прежде чем первая функциональность увидит свет @dmytromindra #xpdays
  • 29. Throughput Пропускная способность – количесво функциональности, которое можно реализовать за определенное время. @dmytromindra #xpdays
  • 30. Все всегда начинается с проблемы @dmytromindra #xpdays
  • 31. Объектно Ориентированный Анализ @dmytromindra #xpdays
  • 32. Анализ Выход: концептуальная Вход: Модель (Domain objects, Проблема Use cases, Interactions, some UI mockups ) @dmytromindra #xpdays
  • 33. Методы OOA • Метод OOSA Шлеер-Меллора • Метод Коада • ОМТ • Метод Мартина Оделла и средства проектирования Ptech • Метод “класс-связь” • OSA • Метод SEOO • Метод BON • Fusion • OBA • Syntropy • MOSES • Метод Текселя (Texel) • Метод OORAS @dmytromindra #xpdays
  • 34. Проектирование Вход: Выход: концептуальная Архитектура (дизайн) модель системы @dmytromindra #xpdays
  • 35. Принципы и инструменты 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 @dmytromindra #xpdays
  • 36. А также • Design Patterns • Domain Driven Design • CQRS • Event Sourcing • MVC • DCI • SOA • … @dmytromindra #xpdays
  • 37. Кажется, что можно все спланировать ? Подробнее в книге Agile Samurai ;) @dmytromindra #xpdays
  • 38. Big Upfront Design (BUFD) @dmytromindra #xpdays
  • 39. No Upfront Design (NUFD) @dmytromindra #xpdays
  • 40. Миф о рефакторинг Ничего не будем делать заранее, сделаем как получится, затем сделаем рефакторинг и будет архитектура. @dmytromindra #xpdays
  • 41. TDD и Архитектура TDD укажет вам на проблемы в проектировании. Но если вы не задали основные направления для движения и эволюции, дизайн и архитектура не получатся. @dmytromindra #xpdays
  • 42. UnixWay от Кента Бека • Make it work – ( Сделай что-то рабочее) • Make it right – ( Сделай рабочее правильным) • Make it fast – (Сделай правильное быстрым) @dmytromindra #xpdays
  • 43. Инструменты А также принципы и практики @dmytromindra #xpdays
  • 44. Парное программирование • Не программируй один. Найди себе друга. @dmytromindra #xpdays
  • 45. Ревью кода Тимлид сурово смотрит в код ... @dmytromindra #xpdays
  • 46. DDD @dmytromindra #xpdays
  • 48. Event Sourcing Состояние доменного объекта переносится в событие. Система хорошо распараллеливается. @dmytromindra #xpdays
  • 50. ООП • ООП – это как в C# • ООП – это как в PHP • ООП – это как в Java @dmytromindra #xpdays
  • 52. Что же делает пользователь ? Это отражено в коде ? @dmytromindra #xpdays
  • 53. Один UseCase разнесен по многим классам. @dmytromindra #xpdays
  • 55. MVC 1979 MVC улучшает восприятие Но по-прежнему не отражает поведение @dmytromindra #xpdays
  • 56. DCI @dmytromindra #xpdays
  • 57. Как пользователь представляет себе это действие ? @dmytromindra #xpdays
  • 58. Ментальная Модель пользователя Данные Роли Взаимодействия @dmytromindra #xpdays
  • 59. Простой пример Transfer Money User Берем один счет, затем берем другой счет, определяем сумму перевода, переводим деньги. @dmytromindra #xpdays
  • 60. Данные (Data) Account CheckingAccount Sav ingsAccount @dmytromindra #xpdays
  • 61. Роли (Interaction) Пассивные (Methodless) «interface» «interface» TransferMoneySink TransferMoneySource Активные (methodful) TransferMoneySourceTrait + TransferTo() : void «interface» «interface» TransferMoneySink TransferMoneySource @dmytromindra #xpdays
  • 62. Контекст (Context) «interface» TransferMoneySink Берем один счет, TransferMoneyContext «Property» TransferMoneySourceTrait Берем другой счет, + TransferMoneySource + TransferMoneySink + Ammount: int + TransferTo() : void определяем сумму перевода, + Execute() : void переводим деньги. «interface» TransferMoneySource @dmytromindra #xpdays
  • 63. DCI & MVC вместе @dmytromindra #xpdays
  • 64. DCI – это еще одна точка зрения @dmytromindra #xpdays
  • 65. Комбинируя подходы мы получаем архитектуру системы MVC Концептуальная DCI проектирование модель Domain Model @dmytromindra #xpdays
  • 66. Do try this ;) @dmytromindra #xpdays
  • 67. Links and References http://www.artima.com/articles/dci_vision.html http://www.leansoftwarearchitecture.com/ @dmytromindra #xpdays
  • 68. Source Code https://github.com/DmytroMindra/DCI-Simple- Sample @dmytromindra #xpdays
  • 69. Итоги • В проектировании очень важны знания • В проектировании очень важен опыт • В проектировании очень важно понимание • Agile архитектура – это люди • DCI стоит попробовать дома • Попробуйте Lean @dmytromindra #xpdays
  • 70. В заключение Программное обеспечение не ограничено физикой, как здания. Оно ограничено фантазией, дизайном, организацией. Короче говоря, оно ограничено свойствами людей, а не свойства мира. "Мы встретили врага, и этот враг мы сами". -- Мартин Фаулер @dmytromindra #xpdays