SlideShare une entreprise Scribd logo
1  sur  21
1
©LuxoftTraining2012
Как увидеть динамику данных в статике кода
Domain
Context
Integration
my@violet-tape.net
Андрей Гордиенков
softblog.violet-tape.ru
2
©LuxoftTraining2012
О докладчике
 Фанат программирования и рассказов о программировании
 Ведет свой блог 3 года: статьи и видео
 АОП евангелист
 Очень ленив, поэтому ищет пути как писать меньше, а делать больше
3
©LuxoftTraining2012
Введение в проблему
 Цели доклада
 Классический взгляд на бизнес-разработку
 Проблема взаимодействия
Ментальные модели
Domain, Context, Integration
Заключение
 Как люди думают
 Неоднозначность объектов
 Расширение сознания
 Определение
 Построение
 Использование
 Pros & Cons
 Ссылки
 Контакты
Содержание
4
©LuxoftTraining2012Введениевпроблему
 Решить проблему статичности кода, возможность увидеть потоки данных.
Целью будет понимание принципов DCI.
 Решить проблему «вспоминания» логики приложения
 Новый взгляд на привычный подход DDD
 Тренировка ума, нашего главного инструмента
 Узнать что-то новое, конференция все же!
Зачем это все вам?
5
©LuxoftTraining2012Введениевпроблему
 MVC
 Model – бизнес-логика
 View – визуальная часть
 Controller – логика взаимодействия
 Domain Driven Design (DDD)
 Доменные объекты > Данные и взаимодействие
 Сервисы > Взаимодействие, бизнес-логика
Классический взгляд
6
©LuxoftTraining2012Введениевпроблему
Классический взгляд
7
©LuxoftTraining2012Введениевпроблему
Взаимодействие
8
©LuxoftTraining2012Введениевпроблему
Взаимодействие
Как это увидеть из кода?
9
©LuxoftTraining2012Введениевпроблему
Взаимодействие
10
©LuxoftTraining2012Ментальныемодели
Ментальная модель
MVVM, MVC и так далее
class Person{
Position{get; set;}
void DoJob()
IsOnSite{get;set;}
void RequestVacation()
….
}
Тут картинка юзера Ивана и его
мыслей
 Повысить Василия
 Делать работу
 Утвердить отпуск Николаю
 Попросить отпуск у босса
11
©LuxoftTraining2012Ментальныемодели
Неоднозначность
42
12
©LuxoftTraining2012Ментальныемодели
Неоднозначность
WoW Level
Время выступления
Денег на счету
Температура
Возраст
Длина
Универсальный ответ на всеЧто угодно!
Это и не хорошо и не плохо, просто нужен контекст!
42
13
©LuxoftTraining2012Ментальныемодели
Расширить сознание
 Объект != класс
 Человечек != Worker
 Модель как фильтр для сырых данных
 Статичный объект человек > доменный объект (domain)
 Не статичное поведение > контекст и взаимодействие (context & interaction)
14
©LuxoftTraining2012Domain,Context,Integration
Определение DCI
 Data: данные живут в доменных объектах в доменных классах
 Context: связывает объекты и роли в сценариях
 Interaction: описывает алгоритм взаимодействия в терминах ролей, которые присутствуют в
голове пользователя
15
©LuxoftTraining2012Domain,Context,Integration
Схема DCI
Конечный объект получается
совмещением роли и класса
И используется к конкретном
контексте через интерфейс
Да, в некотором роде это Dependency Injecton
16
©LuxoftTraining2012Domain,Context,Integration
Context
 Ограниченный набор функций для конкретного контекста (use case)
17
©LuxoftTraining2012Domain,Context,Integration
Пример
18
©LuxoftTraining2012Заключение
Главная цель
 Сделать единой ментальную модель работы с программой и реализацию
19
©LuxoftTraining2012Заключение
Pros & Cons
 Pros
 Быстрый ввод в проект новых людей
 Легкое тестирование
 Контроль поведения компилятором
 Поведение описано более компактно
 Cons
 Некоторая неприспособленность ООП языков
 Много дочерних классов
 Необкатанность в настоящих проектах
20
©LuxoftTraining2012Заключение
Ссылки на материалы
 http://www.leansoftwarearchitecture.com/home/dci-tutorials - видео
 http://www.artima.com/articles/dci_vision.html - теория
21
©LuxoftTraining2012
Всем спасибо за внимание!
Контакты
Почта: my@violet-tape.net
Блог: softblog.violet-tape.ru

Contenu connexe

En vedette

PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model LibraryAndrey Gordienkov
 
Стоп.Советник
Стоп.СоветникСтоп.Советник
Стоп.СоветникRoman Teplov
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)Andrey Gordienkov
 
Seq didática alimentação
Seq didática alimentaçãoSeq didática alimentação
Seq didática alimentaçãoLuzia Ester
 
Mighty Moose - Continuous Testing
Mighty Moose - Continuous Testing Mighty Moose - Continuous Testing
Mighty Moose - Continuous Testing Andrey Gordienkov
 
Alfabeto ilustrado
Alfabeto ilustradoAlfabeto ilustrado
Alfabeto ilustradoLuzia Ester
 

En vedette (10)

QIP 2012
QIP 2012QIP 2012
QIP 2012
 
PostSharp - Threading Model Library
PostSharp - Threading Model LibraryPostSharp - Threading Model Library
PostSharp - Threading Model Library
 
Psi plus
Psi plusPsi plus
Psi plus
 
Стоп.Советник
Стоп.СоветникСтоп.Советник
Стоп.Советник
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
 
Transitive dependencies
Transitive dependenciesTransitive dependencies
Transitive dependencies
 
Seq didática alimentação
Seq didática alimentaçãoSeq didática alimentação
Seq didática alimentação
 
Mighty Moose - Continuous Testing
Mighty Moose - Continuous Testing Mighty Moose - Continuous Testing
Mighty Moose - Continuous Testing
 
basmati rice industry
basmati rice industrybasmati rice industry
basmati rice industry
 
Alfabeto ilustrado
Alfabeto ilustradoAlfabeto ilustrado
Alfabeto ilustrado
 

Similaire à Domain Context Integration

13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...IT-Portfolio
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.EatDog
 
рит2007 требования и состав работ бесков доронин
рит2007   требования и состав работ   бесков доронинрит2007   требования и состав работ   бесков доронин
рит2007 требования и состав работ бесков доронинMedia Gorod
 
Data, Context and Interaction
Data, Context and InteractionData, Context and Interaction
Data, Context and InteractionDmitriy Rozhkov
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpGoSharp
 
Новые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковНовые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковDocsvision
 
О сиськах, лени и некомпетентности (презентация для партнеров Adobe)
О сиськах, лени и некомпетентности (презентация для партнеров Adobe)О сиськах, лени и некомпетентности (презентация для партнеров Adobe)
О сиськах, лени и некомпетентности (презентация для партнеров Adobe)Pavel Cherkashin
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОLuxoft Education Center
 
чмв лекция №5
чмв   лекция №5чмв   лекция №5
чмв лекция №5student_kai
 
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...CodeFest
 
DDD-secon-2014-tsepkov
DDD-secon-2014-tsepkovDDD-secon-2014-tsepkov
DDD-secon-2014-tsepkovMaxim Tsepkov
 
Кирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программированиеКирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программированиеDaria Oreshkina
 
Domain Driven Design - как, почему и зачем?
Domain Driven Design - как, почему и зачем?Domain Driven Design - как, почему и зачем?
Domain Driven Design - как, почему и зачем?ngrebnev
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonPyNSK
 
Pedalim vacancy IT HR
Pedalim vacancy IT HRPedalim vacancy IT HR
Pedalim vacancy IT HRIT-HR Club
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAndrey Gordienkov
 

Similaire à Domain Context Integration (20)

13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
рит2007 требования и состав работ бесков доронин
рит2007   требования и состав работ   бесков доронинрит2007   требования и состав работ   бесков доронин
рит2007 требования и состав работ бесков доронин
 
Data, Context and Interaction
Data, Context and InteractionData, Context and Interaction
Data, Context and Interaction
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Автоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharpАвтоматизация design patterns и компактный код вместе с PostSharp
Автоматизация design patterns и компактный код вместе с PostSharp
 
Новые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиковНовые требования к ECM - ответы российских разработчиков
Новые требования к ECM - ответы российских разработчиков
 
О сиськах, лени и некомпетентности (презентация для партнеров Adobe)
О сиськах, лени и некомпетентности (презентация для партнеров Adobe)О сиськах, лени и некомпетентности (презентация для партнеров Adobe)
О сиськах, лени и некомпетентности (презентация для партнеров Adobe)
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
чмв лекция №5
чмв   лекция №5чмв   лекция №5
чмв лекция №5
 
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
CodeFest 2012. Гладкий Д. — Практика применения MPS на примере проекта «Mobil...
 
drools introduction
drools introductiondrools introduction
drools introduction
 
SECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кодаSECON'2014 - Максим Цепков - DDD: от требований до кода
SECON'2014 - Максим Цепков - DDD: от требований до кода
 
DDD-secon-2014-tsepkov
DDD-secon-2014-tsepkovDDD-secon-2014-tsepkov
DDD-secon-2014-tsepkov
 
Кирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программированиеКирилл Мокевнин — Ментальное программирование
Кирилл Мокевнин — Ментальное программирование
 
Domain Driven Design - как, почему и зачем?
Domain Driven Design - как, почему и зачем?Domain Driven Design - как, почему и зачем?
Domain Driven Design - как, почему и зачем?
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на Python
 
Pedalim vacancy IT HR
Pedalim vacancy IT HRPedalim vacancy IT HR
Pedalim vacancy IT HR
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
 

Domain Context Integration

Notes de l'éditeur

  1. Большинство из нас, если не все, для разработки больших приложений, для бизнес-приложений по большому счету, используют Domain Driven Design подход описанные Эриком Эвансом в 2004 году. Это способ проектирования, который фокусируется прежде всего на предметной области, на объектах реального мира, их поведении и взаимодействии, то есть фокусируется на модели и бизнес-логике Т.е. у нас есть доменные объекты для данных и операций которые они могут выполнять, а так же доменные сервисы, для более комплексного взаимодействия объектов в них реализуется бизнес-логика. При таком подходе используется уже классический принцип по определению того, что будет объектом (данными), а что действием. Существительные в описании предметной области будут объектами, глаголы – методами. Я думаю что большинство начинают именно с такого подхода, чтобы определить что вообще у нас есть из условий задачи. Дальше уже идет тюниг. Рассмотреть пример кода, который должен быть понятен всем и который не вызывает проблем в понимании. Привычный код с которым все более, менее привыкли работать. Гораздо более ранним подходом, который мы используем является MVC. Trygve Reenskaug (Тригве Рейнскау) представил MVC во время визита лаборатории XeroxParc в 1979 году. Вспомнив что сейчас 2012 год (я у кого-то удивление в глазах кажется увидел), можно сказать, что у Тригве было достаточно времени, для того чтобы проанализировать собственное изобретение и его применение, чтобы изобрести что-то новое. Да, да, именно этот человек предложил дальнейшее развитие в виде DCI.
  2. Схематически любой похожий код можно представить в таком виде. Конечно это не строгий UML, но и так все понятно. Объекты, методы. Я думаю вы согласитесь, что это недалеко от правды. Как они работают и взаимодействуют? Да, тут они подсвечены цветом и можно примерно догадаться что с чем работает.
  3. Вуаля! Пусть они взаимодействуют как на рисунках. Вот у нас два каких-то UseCase, как вы видите сильно отличных, но с одними и теми же объектами (они же классы). Данное взаимодействие четче всего видно в run-time режиме. Главная проблема такого кода отлично иллюстрируется следующим слайдом.
  4. Как можно определить, что для чего использовать? В редакторе для нас весь код выглядит как на картинке. Все методы равноважны и имеют один и тот же приоритет в выполнении. Если вернуться к коду, то очень легко можно уволить босса, или же самого себя отправить в отпуск. Компилятор ругаться не будет и не подскажет. Однако же это не соответствует ментальной модели, которая находится в голове пользователя. Код позволяет сделать все, но это «все» может быть неверно. В run-time вы может не получите никакой исключительной ситуации, но по сути работа будет выполнятся не верно. При модификации и изучении такого кода трудно понять связь элементов, что задумывалось изначально, не видно ментальной модели, которая натуральным образом возникает в голове пользователя.
  5. 42 – что это такое? Чем это может быть, как вы думаете?
  6. Как вы видите, 42 может быть чем угодно, и уровнем в WoW и темературой за бортом, возрастом, длинной чего либо. Это может быт остаток на счете, и да, это универсальный ответ на все. 42 может быть чем угодно. Это объект. И возможности, а так же правила использования этого объекта будет ясно только из контекста использования. Кстати, похожая проблема всегда возникает при переводе слов. Если реально хочешь помочь с переводом, всегда спрашиваешь контекст, в котором используется слово.