реализация шаблона запроса-ответа в .net - PullRequest
0 голосов
/ 09 сентября 2011

Просто хотел знать, иду ли я в правильном направлении или нет.

Я реализую шаблон запроса-ответа (Request-Response), в котором каждая операция отправляет объект запроса и возвращает объект ответа.

Например:

Public FetchCustomerResponse Fetch(FetchCustomerRequest searchObject)

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

public interface IRepositoryReadOnly<TGetRequest, TGetResponse> : IDisposable
{
    TGetResponse FetchAll();
    TGetResponse Fetch(TGetRequest reqObject);
}

public interface IRepositoryReadWrite<TGetRequest, TGetResponse, TPutRequest, TPutResponse> : IRepositoryReadOnly<TGetRequest, TGetResponse>
{
    TPutResponse Insert(TPutRequest dto);
    TPutResponse Update(TPutRequest dto);
    void Delete(long id);
}

У меня проблема в void Delete(long id);.

Я хочу, чтобы мой метод удаления принимал объект, который содержит другие поля, такие как UserName, TimeStamp и т. Д.

Должен ли я создать объект DeleteRequestObject со свойствами и добавить его в IRepositoryReadWrite?

Вот как это будет выглядеть, если я это сделаю.

public interface IRepositoryReadWrite<TGetRequest, TGetResponse, TPutRequest, TPutResponse, TDeleteRequest, TDeleteResponse> : IRepositoryReadOnly<TGetRequest, TGetResponse>
{
    TPutResponse Insert(TPutRequest dto);
    TPutResponse Update(TPutRequest dto);
    TDeleteResponse Delete(long TDeleteRequest);
}

Поскольку объекты DeleteRequest и DeleteReponse будут одинаковыми для всех операций (я так думаю), это будет хорошей реализацией или я совершенно не в курсе и делаю все неправильно?

1 Ответ

0 голосов
/ 09 сентября 2011

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

Если на каком-то этапе вы, например, обнаружите, что вы постоянно удаляете некоторые записи по идентификатору, и для этого вам регулярно приходится создавать полный объект запроса с одним заполненным свойством, вы всегда можете создать метод расширения - или даже собственный метод класса, если вы хотите - он примет long id и создаст объект запроса для вас.

Если вы оставите его только с идентификаторами, то на каком-то этапе вам, возможно, понадобится объект запроса, но модификация будет намного сложнее.

...