• Как работает подход Unit of Work?

    @Flying
    Unit of Work - это паттерн определяющий логическую транзакцию т.е. атомарную синхронизацию изменений в объектах, помещённых в объект UoW с хранилищем (базой данных).

    Если обратиться к исходному описанию этого паттерна у Мартина Фаулера - то видно что объект, реализующий этот паттерн отвечает за накопление информации о том какие объекты входят в транзакцию и каковы их изменния относительно исходных значений в хранилище. Основная работа производится в методе commit() который отвечает за вычисление изменений в сохранённых в UoW объектах и синхронизацию этих изменений с хранилищем (базой данных).

    Паттерн Unit of Work как правило не является полностью самостоятельным, он обычно тесно связан с паттерном Identity Map, задача которого - сохранение карты созданных объектов, взятых из хранилища с тем чтобы гарантировать что одна единица информации из хранилища представлена ровно одним экземпляром объекта данных в приложении. Это позволяет избежать конфликтов изменений т.к. не допускает ситуации когда два объекта, представляющих один и тот же элемент данных в хранилище, изменены по-разному. Информация из Identity Map используется в методе commit() паттерна Unit of Work для вычисления разницы между исходными данными и накопленными изменениями.

    Поскольку для вычисления разницы (и, соответственно, определения того что и каким образом должно быть изменено в хранилище) необходимо знать какие данные и как именно хранятся в объектах - как правило необходима также реализация паттерна Metadata Mapping, описывающего связь между содержимым хранилища (к примеру таблицами и столбцами базы данных) и классами / свойствами объектов.

    Также, если данные в хранилище не являются независимыми (к примеру связи между таблицами в базе данных) - может потребоваться реализации ряда паттернов, отвечающих за сохранение информации о связях между данными (это паттерны раздела Object-Relational Structural Patterns в каталоге паттернов).

    Подводя итог: сам по себе Unit of Work довольно прост в своём внешнем интерфейсе, но реализация его корректной работы требует предоставления множества дополнительных данных, поэтому миниатюрных примеров привести не могу.

    Если говорить о PHP - то лучшей реализацией этих паттернов на PHP безусловно является Doctrine ORM. В частности в разделе Working with Objects документации Doctrine можно найти хорошее описание и множество примеров использования паттернов, описанных выше.
    Ответ написан
    6 комментариев
  • Django vs Asp.net?

    NightmareZz
    @NightmareZz
    Нищий разработчик из Симферополя
    И питон и дотнет - это не просто языки, фреймворки и технологии, это огромные пласты программерской деятельности с миллионными коммьюнити. Оба из них весьма популярны и имеют крайне широкое применение. Есть безусловно и отличия, но их всех не перечислить, как не перечислить достоинств и недостатков. Потому выбор чего-то одного из этого, это - либо вопрос случайности, приверженности, или определённого склада ума. Нельзя просто так взять и посоветовать что-то одно.
    Ответ написан
    Комментировать
  • Возможно ли все dll библиотеки в проекте "сложить" в один исполняемый файл?

    petermzg
    @petermzg
    Самый лучший программист
    Можно.
    1. Вы помещаете все ваши dll в ресурсы exe файла
    2. На старте exe подписываетесь на AssemblyResolve текущего домена.
    2.1. Вытаскиваете dll из ресурса
    2.2. Получаете содержимое и
    return AppDomain.CurrentDomain.Load(bytes);
    Ответ написан
    Комментировать