dci

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

Upload: dmytro-mindra

Post on 04-Dec-2014

1.193 views

Category:

Technology


9 download

DESCRIPTION

 

TRANSCRIPT

Page 1: DCI

@dmytromindra

DATACONTEXTINTERACTION

Дима Миндра

Lohika, Одесса

Page 2: DCI

@dmytromindra

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

Page 3: DCI

@dmytromindra

Page 4: DCI

@dmytromindra

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

Page 5: DCI

@dmytromindra

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

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

Page 6: DCI

@dmytromindra

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

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

Page 7: DCI

@dmytromindra

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

Page 8: DCI

@dmytromindra

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

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

Page 9: DCI

@dmytromindra

Проблемы

Page 10: DCI

@dmytromindra

Real .NET Developer

Page 11: DCI

@dmytromindra

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

Page 12: DCI

@dmytromindra

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

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

Анализ

Page 13: DCI

@dmytromindra

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

Page 14: DCI

@dmytromindra

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

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

Page 15: 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: DCI

@dmytromindra

Понимание

Page 17: DCI

@dmytromindra

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

Цикл

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

Выбор

A

B C

D

C1I

I1 C2 I2

Page 18: DCI

@dmytromindra

Все запутано

Page 19: DCI

@dmytromindra

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

Page 20: DCI

@dmytromindra

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

Page 21: DCI

@dmytromindra

Опять ?

Page 22: DCI

@dmytromindra

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

Page 23: DCI

@dmytromindra

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

Сложность

Взаимопонимание

Page 24: DCI

@dmytromindra

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

Page 25: DCI

@dmytromindra

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

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

Page 26: DCI

@dmytromindra

Agile ценности

• Individuals and interactions• Working software• Customer collaboration• Responding to change

Page 27: DCI

@dmytromindra

MVC 1979

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

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

Page 28: DCI

@dmytromindra

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

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

Page 29: DCI

@dmytromindra

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

Лексический анализ• Существительные – классы• Глаголы - методы

Page 30: DCI

@dmytromindra

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

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

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

Page 31: DCI

@dmytromindra

DCI

Page 32: DCI

@dmytromindra

Кто виноват ?

Trygve Mikkjel Heyerdahl ReenskaugJim Coplien

Page 33: DCI

@dmytromindra

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

Page 34: DCI

@dmytromindra

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

Данные Роли

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

Page 35: DCI

@dmytromindra

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

Transfer Money

User

Берем один счет, затем берем другой счет, определяем сумму перевода,переводим деньги.

Умный

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

Page 36: DCI

@dmytromindra

Данные (Data)

Account

Sav ingsAccountCheckingAccount

Page 37: DCI

@dmytromindra

Роли (Interaction)«interface»

TransferMoneySink«interface»

TransferMoneySource

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

«interface»TransferMoneySink

«interface»TransferMoneySource

TransferMoneySourceTrait

+ TransferTo() : void

Активные (methodful)

Не натуральная ко

жа,

а чистая си

нтетика

(Pure Fabric

ation)

Page 38: DCI

@dmytromindra

Контекст (Context)

Берем один счет, Берем другой счет, определяем сумму перевода,переводим деньги.

«interface»TransferMoneySink

«interface»TransferMoneySource

TransferMoneySourceTrait

+ TransferTo() : void

TransferMoneyContext

«Property»+ TransferMoneySource+ TransferMoneySink+ Ammount: int

+ Execute() : void

Page 39: DCI

@dmytromindra

DCI & MVC вместе

Page 40: DCI

@dmytromindra

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

Page 41: DCI

@dmytromindra

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

MVC

DCI

Domain Model

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

Page 42: DCI

@dmytromindra

Время действовать(показывать код)

Page 43: DCI

@dmytromindra

Как насчет TDD

Page 44: DCI

@dmytromindra

SOLID-но ?

Page 45: DCI

@dmytromindra

Page 46: DCI

@dmytromindra

Page 47: DCI

@dmytromindra

Page 48: DCI

@dmytromindra

Page 49: DCI

@dmytromindra

Page 50: DCI

@dmytromindra

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

Page 51: DCI

@dmytromindra

Do try this ;)

Page 52: DCI

@dmytromindra

Links and References

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

http://www.leansoftwarearchitecture.com/

Page 53: DCI

@dmytromindra

Source Code

https://github.com/DmytroMindra/DCI-Simple-Sample

Page 54: DCI

@dmytromindra

Спасибо !