dci

Post on 04-Dec-2014

1.193 Views

Category:

Technology

9 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

@dmytromindra

DATACONTEXTINTERACTION

Дима Миндра

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 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, …..

@dmytromindra

Понимание

@dmytromindra

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

Цикл

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

Выбор

A

B C

D

C1I

I1 C2 I2

@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

Кто виноват ?

Trygve Mikkjel Heyerdahl ReenskaugJim Coplien

@dmytromindra

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

@dmytromindra

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

Данные Роли

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

@dmytromindra

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

Transfer Money

User

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

Умный

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

@dmytromindra

Данные (Data)

Account

Sav ingsAccountCheckingAccount

@dmytromindra

Роли (Interaction)«interface»

TransferMoneySink«interface»

TransferMoneySource

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

«interface»TransferMoneySink

«interface»TransferMoneySource

TransferMoneySourceTrait

+ TransferTo() : void

Активные (methodful)

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

жа,

а чистая си

нтетика

(Pure Fabric

ation)

@dmytromindra

Контекст (Context)

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

«interface»TransferMoneySink

«interface»TransferMoneySource

TransferMoneySourceTrait

+ TransferTo() : void

TransferMoneyContext

«Property»+ TransferMoneySource+ TransferMoneySink+ Ammount: int

+ Execute() : void

@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

Спасибо !

top related