Entity Framework Decorator Pattern - PullRequest
1 голос
/ 15 июня 2010

В моей сфере деятельности у нас есть продукты. Эти продукты могут быть изменены пользователем путем добавления к ним Модификаций. Модификации могут делать такие вещи, как изменение цены и свойств продукта. Мне кажется, это подходит для шаблона Decorator идеально .

Теперь представьте себе базу данных, в которой Продукты существуют в одной таблице, а Модификации существуют в другой таблице, и база данных подключена к моему приложению через Entity Framework. Как мне добиться, чтобы объекты Product и Modification реализовали один и тот же интерфейс, чтобы я мог использовать их взаимозаменяемо?

Например, такие вещи, которые я хотел бы сделать: Для данного объекта Модификации вызовите .GetNumThings (), который затем вернет количество вещей в исходном объекте плюс или минус количество вещей, добавленных модификацией.

Этот вопрос может быть связан с довольно серьезным отсутствием внимания к мелочам EF (весь мой опыт до сих пор был довольно простым LOB-приложениями Silverlight), и если это так, пожалуйста, не стесняйтесь скажите мне RTFM.

Заранее спасибо!

Edit: Также было бы неплохо, если бы, учитывая третью таблицу, связывающую Продукты с Модификациями (один-ко-многим), она могла реконструировать декорированный объект (я понимаю, что это, вероятно, выход из EF для автоматического выполнения). Как бы вы порекомендовали пойти по этому поводу, и где будет находиться этот код? Будет ли это частью классов EF или каждый объект, полученный от БД, должен проходить через своего рода «конструктор» для создания декорированного объекта из Продукта и его списка Модификаций?

1 Ответ

0 голосов
/ 15 июня 2010

Я не совсем уверен, правильно ли я понял ваш вопрос, но здесь говорится: вы можете создавать частичные классы, определенные в вашей модели EF.Вы можете определить общий интерфейс и использовать частичные классы для реализации этого интерфейса.

Например:

public interface IProduct{
   public int GetNumThings();
}

public partial class Product : IProduct{

   public int GetNumThings()
   {
   ...
   }
}

public partial class Modification: IProduct{
   public int GetNumThings()
   {
   ...
   }
}
...