2012-05-22 3 views
2

В настоящее время я разрабатываю довольно большое веб-приложение и использую дизайн, ориентированный на домен.Изменение объектов отслеживания из нескольких источников в режиме управляемого доменом

У меня в настоящее время возникают проблемы с отслеживанием изменений в моем объекте Product. Дело в том, что продукты создаются частично из данных в SQL Azure, частично из данных в Azure Table Storage. Если некоторые свойства изменены, мне нужно будет сохранить их, и другие изменения будут только для одного.

В результате я не могу использовать NHibernate или Entity Framework для отслеживания изменений. Например Прайс аргумент о методе

public void AddPrice(Price price) 

на сущности продукта должен быть сохранен в SQL Azure, расчеты по диапазону цен будут иметь место, и результат будет сохранен в Azure Table Storage.

Как бы вы это разрешили?

Мысли:

1) Я думал о реализации моего собственного изменения трекера на основе Castle.DynamicProxy, но кажется, что довольно утомительно.

2) Внедрение событий внутри объектов домена. Это не хорошая вещь.

ответ

1

Рассеяние одного объекта в нескольких постоянных магазинах может быть не очень хорошей идеей. Чтобы быть более точным, это может означать, что это не одно и то же лицо, и его можно разделить на более мелкие, более точно разработанные части.

расчетов на диапазоне цен будут проходить

Вы уверены, что эти расчеты влияют на сущность продукта и должны быть обработаны с помощью той же сессии NHibernate/EF используется в хранилище продукта? Поскольку они должны храниться в другом месте, не составляют ли они понятие первого класса на вездесущем языке, в результате чего возникает отдельный объект с собственной логикой сохранения?

http://ayende.com/blog/153699/ask-ayende-repository-for-abstracting-multiple-data-sources

+0

Благодарим за разъяснение мне. Причина использования Azure Table Storage - по соображениям производительности. То, что я буду делать, всегда использует SQL Azure для сохранения моей модели домена и предоставления каких-либо инфраструктурных услуг для создания объектов хранения таблиц на основе SQL Azure. Это также отлично работает в сочетании с шаблоном CQRS (http://martinfowler.com/bliki/CQRS.html). – borgcc

0

Что делают ОРМ? Они берут копию данных, которые используются для восстановления вашего объекта в его текущем состоянии, перед тем как передать вам ссылку на объект. Когда поведение было применено к объекту, и вы просите его сохранить его, ORM будет сравнивать свою копию данных с данными, находящимися в данный момент внутри объекта, и соответствующим образом обновлять флеш. Почему бы не сделать то же самое? Единственное различие заключается в том, что не все обнаруженные изменения будут сброшены в один и тот же хранилище данных.

HTH.

Кстати, любой параллелизм здесь происходит?

Смежные вопросы