Upload
anton-arhipov
View
1.990
Download
4
Embed Size (px)
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()
СПАСИБО ЗА ВНИМАНИЕ!
ВОПРОСЫ?