Patterns By Igor Menkov Part 1a

Preview:

DESCRIPTION

design patterns

Citation preview

ВЯЖЕМ УЗОРЫИгорь Меньков

ПОСТАНОВКА ЗАДАЧИ

Задача создать приложение имеющее базу данных, пользовательский интерфейс и бизнес логику

Дополнительные требования Уменьшить нагрузку на базу данных Многопользовательская система с возможностью

одновременного доступа к данным несколькими пользователями

Обеспечить целостность данных

Наши руки не для скуки Мы не знаем о существовании фреймворков Или считаем, что фреймворк – это для ленивых

PATTERN – ЗАЧЕМ ЭТО НУЖНО?

Одна из основных задач шаблонов – избежать изобретения велосипеда

Многие шаблоны используются во всевозможных фреймворках

ИХ МНОГО, А ВРЕМЕНИ МАЛО…

Используем: Identity && Identity map Record set Optimistic Offline Lock Unit of Work

Теория: Fowler, M.

Patterns of Enterprise Application Architecture.

IDENTITY

Identity AKA Identity Field Хранит первичный ключ из БД в объекте

Как? Integer String Guid (Да, я работаю на платформе

Microsoft!)

Области использования: База данных и объект (Entity) Интеграция со внешними системами

IDENTITY MAP

Обеспечивает однократную загрузку объекта

Как? Типичный пример – hashtable

Области использования: Кэширование объектов Name-Value data storage

(Name == Identity) Оптимизация loop’ов

RECORD SET Суть Record Set в предоставлении

структуры данных, которая выглядит в точности как результат SQL-запроса, но может управляться и обрабатываться любыми частями системы

Как? Обычно представляют собой классы,

сгенерированные исходя из схемы базы данных

Области использования: Приложения с небольшим

количеством таблиц

OPTIMISTIC OFFLINE LOCK

Предотвращение конфликтов между конкурирующими бизнес-транзакциями

Как? Timestamp, version WHERE id = ? and version = ?

Область применения: Многопользовательские системы Интеграция

UNIT OF WORK

Обслуживает набор объектов, изменяемых в бизнес-транзакции (бизнес-действии)

Как? Можно сделать самому – очень интересно, но

стоит ли? Практически все существующие на данный день

фреймворки имеют данную функциональность

Области применения: Бизнес транзакции любом приложении Бизнес транзакции в распределенных системах

КАК ЭТО РАБОТАЕТ?

sd Getting data

UI DatabaseUnitOfWork

User

Get data()

Get data()

Transform to SQL statment()

Get data from SQL()

Transform to record set()

Store identity and timestamp(version)

Display data to user()

КАК ЭТО РАБОТАЕТ? sd Sav ing data

UI DatabaseUnitOfWork

User

Save data()Get latest data()

Get latest data()

Update record set values()

Update timestamp(version) field

Save data()

Open transaction()

Commit changes()

КАК ЭТО РАБОТАЕТ? sd Business logic

UnitOfWork IdentityMap Database

Request data object()

Check in IndentityMap by Identity()

[if not exists in IdentityMap]:Get from database()

Store to IdentityMap()

СПАСИБО ЗА ВНИМАНИЕ!

ВОПРОСЫ?