2010-06-15 3 views
1

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

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

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

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

Заранее благодарен!

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

ответ

0

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

Например:

public interface IProduct{ 
    public int GetNumThings(); 
} 

public partial class Product : IProduct{ 

    public int GetNumThings() 
    { 
    ... 
    } 
} 

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

Это отвечает на вопрос о необходимости два реализовать один и тот же интерфейс. Есть ли что-нибудь, что может помешать интерфейсу IProduct содержать свойство типа IProduct? –

+0

@ Энтони Комптон: Нет, вы могли бы также использовать ссылки, содержащиеся в базе данных. В конце концов, похоже, что в любом случае нужно будет хранить ссылку между продуктом и декоратором. –

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