У меня есть мои сущности, такие как Заказчик, Заказ и т. Д., Определенные в моей доменной модели.
Теперь я хочу определить интерфейс под названием IRepository для представления моего уровня персистентности, далее у меня будет SQLRepository, CacheRepository, который реализуетIRepository.
Теперь мне интересно, стоит ли мне определять IRepository в доменной модели или на уровне доступа к данным?Я предполагаю, что SQLRepository и CacheRepository должны входить в DAL, но IRepository также входит туда?
Далее, например, мой репозиторий возвращает список клиентов из таблицы Customer, я немного запутался в том, какчтобы спроектировать это, кажется, что я заканчиваю тем, что повторяю типы в DAL и Domain Model.Смотрите пример ниже:
В приложении я хочу сделать что-то вроде этого:
var repository = new SQLRepository();
//Below repository.customers represents customer table
List<Customer> customers = repository.Customers.list();
Итак, в моем домене:
class Customer
{
public int id;
public string name;
}
В моем DAL:
class SqlRepository:IRepository
{
public CustomerTable Customers;
}
class CustomerTable
{
public List<Customer> list();
}
Я хотел бы знать, есть ли лучший способ дизайна этих слоев?
* ОБНОВЛЕНИЕ
У меня уже есть DAL и домен, определенные в разных библиотеках / сборках классов.Первоначально я думал, что у меня будут объекты POCO, такие как Customer, которые представляют одну запись в таблице базы данных, но тогда где объявить Customer.Add (customer)?это идет в DAL?Мне не нужны бизнес-правила в DAL, если я начну добавлять методы в свои сущности, они станут сложными, и в них будет присутствовать логика персистентности и бизнес-логика.