Шаблон репозитория: подпись метода для методов редактирования / удаления - PullRequest
3 голосов
/ 02 февраля 2011

Я пытаюсь научить себя шаблону хранилища, и у меня есть вопрос передового опыта.

Представьте, что у меня есть сущность (это сущность linq to sql, но я разобрал всю linq наSQL-код и атрибуты аннотаций данных для наглядности):

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public string Telephone { get; set; }
}

На данный момент абстрактное хранилище для моего интерфейса:

public interface IPersonRepository
{
    IQueryable<Person> Person { get; }
    void Add(Person person);
    void SubmitChanges();
    // I want an Edit method here
    // I want a Delete method here
}

У меня такой вопрос: какой будет сигнатура методадля методов редактирования / удаления?Каковы будут лучшие практики для них?Например, если бы Id был единственным «не редактируемым» (то есть ключевым) свойством Person, как бы вы это реализовали?

Должен ли Edit принимать параметр Person, а затем код метода редактирования искать сущность с предоставленным идентификатором и редактировать таким образом?

Следует ли удалить параметр Person или просто идентификатор?

Я пытаюсь придумать, какой самый логичный и понятный способ сделать это, но я запутался, поэтому подумал, что я попрошу!

Спасибо!

Ответы [ 2 ]

4 голосов
/ 02 февраля 2011

У меня обычно есть оба (сущность и Id) для удаления:

void Delete(Person person);
void DeleteById(int personId);

и один для сохранения на сущности:

void Save(Person person);

Вы также можете подумать о созданииБазовый базовый репозиторий для стандартных действий CRUD:

public interface IBaseRepository<T>
{
    T GetById(Guid id);
    IList<T> GetAll();
    void Delete(T entity);
    void DeleteById(Guid id);
    void Save(T entity);
}

Если вам просто необходимы Save(T entity) или Insert(T entity) и Update(T entity), это немного зависит от вашей архитектуры.

1 голос
/ 02 февраля 2011

Ваш метод удаления должен выглядеть следующим образом.

    void Delete(Person person); 

Если вам нужен более общий подход к шаблонам, ознакомьтесь с этой записью в блоге: Репозиторий Entity Framework и шаблон единицы работы T4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...