Domain model + репликация
От: shev  
Дата: 13.08.07 08:05
Оценка:
Привет.

Нужна помощь по ряду вопросов.
Есть программа. Первоначально она была реализована мной на Dataset'ах. В последствии из-за усложняющейся бизнес-логики и чтения(и наконец-то понимания!) Фаулера я переделал ее на объектную модель (Domain Model).
С самого начала проекта добавление и обновление записей производилось в хранимых процедурах: в них производились определенные проверки и непосредственно сохранение всех полей. Таблицы доступны только на SELECT. При переходе на Domain Model я оставил способ сохранения через хранимки, т.к. их было уже большое кол-во и проверки которые они содержат выкидывать нельзя.

Сейчас возможен контракт с крупным предприятием. Одно из требований: реализовать консолидированный сбор данных. Т.е. все данные из отделений попадают в филиал. В филиале их могут изменять и исправления должны попадать обратно в отделения.

Проблемы:
1. Если поднимать репликацию, то способ сохранения через хранимки, в которой обновляются ВСЕ поля, даже которые не изменились, плохой, из-за возникновения большого кол-во коллизий при изменении одной и той же записи. Гораздо грамотнее делать UPDATE только тех полей, которые реально изменит пользователь. Т.е. по любому придется отказываться от хранимок?

2. Вытекает из предыдущего. Если делать UPDATE только измененных полей, то как это реализовать. Способ хранить в каждом классе признак измененности для каждого поля мне не нравится. Слишком много кода добавлять придется. Фаулер предлагает хранить в UnitOfWork копии "чистых" объектов и перед сохранением сравнивать все поля. Читал документацию по Хибернейту, но так и не понял, как она сохраняет поля. Какие еще есть варианты?

3. Ключи в таблицах у меня IDENTITY. Придется от них отказываться и переделывать на GUID'ы или делать составные (например с префиксом номера отделения)? Как проще и выходнее? Хотя и так ясно, что на GUID'ах проще, а вот выгоднее ли?

4. И вообще насчет проверок на SQL сервере, если я отказываюсь от хранимок. Переносить мне проверки в триггеры или все проверки реализовать на клиенте, а SQL сервер использовать только для хранения?

Очень надеюсь на вашу помощь!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.