在.net中实现请求 - 回复模式

时间:2011-09-09 12:39:51

标签: c# design-patterns architecture

只是想知道我是否朝着正确的方向前进。

我正在实现Request-Reply(请求 - 响应)模式,其中每个操作都发送一个请求对象并获取响应对象。

例如:

Public FetchCustomerResponse Fetch(FetchCustomerRequest searchObject)

我对实现我的存储库感到困惑。我有一个通用的repositiry界面,如下所示:

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);

我希望我的delete方法接受包含其他字段的对象,如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 :(得分:0)

我会说你可能会这样,额外的Request-Response对象肯定不会伤害你。

例如,如果在某个阶段您发现您不断按ID删除某些条目,并且为此您经常需要创建一个填充了一个属性的完整请求对象,您始终可以创建一个扩展方法 - 甚至是本机类方法,如果您愿意 - 它将接受long id并为您构建请求对象。

如果你只留下id,那么在某个阶段你可能需要请求对象,但修改会更加困难。