54
@dmytromindra DATA CONTEXT INTERACTION Дима Миндра Lohika, Одесса

CiklumNETSat10122011:DmitriyMindra-DCI

  • Upload
    ciklum

  • View
    215

  • Download
    1

Embed Size (px)

Citation preview

Page 1: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

DATA

CONTEXT

INTERACTION

Дима Миндра

Lohika, Одесса

Page 2: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Page 3: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Page 4: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Page 5: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Проблема №1: Завершенность

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

Page 6: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Проблема №2: Дефекты

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

Page 7: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Page 8: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Проблема №4: Поддержка

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

Page 9: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Проблемы

Page 10: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Real .NET Developer

Page 11: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Объектно

Ориентированный

Анализ

Page 12: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Вход: Проблема

Выход:

концептуальная

Модель (Domain objects,

Use cases, Interactions,

some UI mockups )

Анализ

Page 13: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Методы OOA

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

Page 14: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

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

системы

Page 15: CiklumNETSat10122011:DmitriyMindra-DCI

@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: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Понимани

е

Page 17: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Цикл

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

Выбор

A

B C

D

C1I

I1 C2 I2

Page 18: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Все запутано

Page 19: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Page 20: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Page 21: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Опять ?

Page 22: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Page 23: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Page 24: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Один UseCase разнесен по

многим классам.

Page 25: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

То, как представляет себе систему

пользователь не совпадает с тем, как она

спроектирована

Page 26: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Agile ценности

• Individuals and interactions

• Working software

• Customer collaboration

• Responding to change

Page 27: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

MVC 1979

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

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

Page 28: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

ООП фокусируется на том что

система из себя представляет.

При этом может быть совершенно не очевидно,что она делает и как ей пользоваться

Page 29: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Дихотомия ООП

Лексический анализ

• Существительные – классы

• Глаголы - методы

Page 30: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Объектное мышление

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

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

Page 31: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

DCI

Page 32: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Кто виноват ?

Trygve Mikkjel Heyerdahl ReenskaugJim Coplien

Page 33: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Как пользователь представляет

себе это действие ?

Page 34: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Ментальная Модель

пользователя

Данные Роли

Взаимодействия

Page 35: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Простой пример

Transfer Money

User

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

затем берем другой счет,

определяем сумму перевода,

переводим деньги.

Page 36: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Данные (Data)

Account

Sav ingsAccountCheckingAccount

Page 37: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Роли (Interaction)

«interface»

TransferMoneySink

«interface»

TransferMoneySource

Пассивные (Methodless)

«interface»

TransferMoneySink«interface»

TransferMoneySource

TransferMoneySourceTrait

+ TransferTo() : void

Активные (methodful)

Page 38: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Контекст (Context)

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

Берем другой счет,

определяем сумму

перевода,

переводим деньги.

«interface»

TransferMoneySink

«interface»

TransferMoneySource

TransferMoneySourceTrait

+ TransferTo() : void

TransferMoneyContext

«Property»

+ TransferMoneySource

+ TransferMoneySink

+ Ammount: int

+ Execute() : void

Page 39: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

DCI & MVC вместе

Page 40: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Page 41: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Комбинируя подходы мы

получаем архитектуру системы

MVC

DCI

Domain Model

Концептуальная модель

проектирование

Page 42: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Время действовать

(показывать код)

Page 43: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Как насчет TDD

Page 44: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

SOLID-но ?

Page 45: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Page 46: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Page 47: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Page 48: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Page 49: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Page 50: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

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

Page 51: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Do try this ;)

Page 52: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra

Links and References

http://www.artima.com/articles/dci_vision.html

http://www.leansoftwarearchitecture.com/

Page 54: CiklumNETSat10122011:DmitriyMindra-DCI

@dmytromindra