2011-10-10 3 views
2

Я заметил, что на самом деле нет никаких рифм или причин, чтобы мои репозитории воспринимали объекты или примитивы как параметры, или же методы CREATE возвращают только int (ID из БД) или полноценный объект.Должны ли репозитории использовать объекты или примитивы?

Итак, мой вопрос в том, должны ли репозитории проходить и возвращать объекты или примитивы? Какой совет вы можете дать по этому вопросу? Можете ли вы поделиться любыми подводными камнями или опытом с любым подходом?

Пример:

public class ProductRepository : IProductRepository 
{ 
       // Pass in the whole object to the repo method...? 
    public int Add(Product product) 
    { 
     // return just the productId...? 
    } 

        // Pass in the individual primitive values...? 
    public Product Add(string productName, decimal productPrice, string description) 
    { 
     // return the whole Product object...? 
    } 
} 

Что если информация требуется от нескольких объектов? Разумеется, с точки зрения ООП лучше обходить объекты здесь, нет? (Я быть развязным здесь ...)

public int Add(int merchantId, Product product) 
{ 
    // database call needs merchant info... 
} 

public int Add(Merchant merchant, Product product) 
{ 
    var merchantId = merchant.ID; 
    // database call needs merchant info... 
} 

ответ

2

Репозиторий и завод - это разные концепции. Завод отвечает за создание объектов; репозиторий отвечает за создание созданных-других объектов и добавление их в хранилище данных.

С этой точки зрения репозиторий не должен нести ответственность за создание объектов и, следовательно, не имеет оснований для работы с примитивными значениями.

5

нормально, вы увидите через короткий промежуток времени (если вы используете несколько репозиториев), что это образец себя и может быть переработан в какой-то базового класса (для доступа к данным). Но для этого вы не сможете предоставить расширенные параметры для добавления/обновления и т. Д. (И вы тоже не должны думать о объекте с 10 + свойствами), а просто шаблон с самим объектом.

Поэтому используйте вариант 1;)

0

Хранилище работает на лицо, не примитивные полей. Примитивные поля обычно извлекаются из объекта посредством Data Access, один уровень абстракции ниже репозитория. Таким образом, чтобы ответить на ваш вопрос, всегда используйте объекты - ваши примитивные поля являются деталями реализации уровня доступа к данным и не имеют бизнеса, действующего в качестве параметров в интерфейсе репозитория, если только они не являются частью фильтра запросов.

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