IRepository <T>и Repository-Per-Entity - PullRequest
0 голосов
/ 27 января 2011

Я меняю архитектуру корпоративного бухгалтерского приложения.Я собираюсь использовать шаблон IRepositoy , но с небольшой разницей.Я собираюсь сделать интерфейс для каждой сущности, которая является производной от базового IRepository .например, если бы мои объекты были Client, Product и Order, то у меня было бы

IClientRepository: IRepository IProductRepository: IRepository IOrderRepository: IRepository

public interface IRepository<TDataModel, TId>
{
    TDataModel Get(TId Id);
    IList<TDataModel> List();

    TDataModel Add(TDataModel Item);
    TDataModel Add(TDataModel Item, IContext executingContext);

    void Update(TDataModel Item);
    void Update(TDataModel Item, IContext executingContext);

    bool Delete(TId Id);
    bool Delete(TId Id, IContext executingContext);

    IList<TDataModel> Where
       (System.Linq.Expressions.Expression<Func<TDataModel, bool>> criteria);
}


public interface IProductRepository : IRepository<DataModel.Product, int>
{

}

причина использования этого подхода заключается в том, что я хочу установить некоторые атрибуты модели домена в DAL, а не в BLL - например, установить CreationDate некоторых объектов (кстатиdo?)

Я видел несколько примеров IRepository <>, но не смог найти ничего, что использовало бы эту комбинацию.Я хочу знать, есть ли что-нибудь хорошее, чтобы сделать это?это правильно на всех?какие еще плюсы и минусы?

заранее спасибо

1 Ответ

0 голосов
/ 30 января 2011

Я думаю, это зависит от того, как вы думаете о дате создания.Это часть домена или нет?Зависит ли какая-либо предметная логика от значения?

Например, нужна ли системе возможность «создавать от имени» (в этом случае дата создания и создания не будут равны текущему пользователю и текущему времени)?Будет ли что-нибудь сломаться, если восстановление данных из резервной копии не сохранит исходные значения?Имеет ли для вас значение, является ли дата создания клиентом timetime, сервером datetime или базой datetime?

Если ответом на все вышеизложенное является НЕТ, то A) дата создания не является частью домена, поэтому онаможно установить внешне Б) оно тебе вообще нужно?если это так, то я предполагаю, что это касается только вопросов инфраструктуры - управления кэшем, уведомлений об изменениях и т. д. Это верно?

...