只是想知道我是否朝着正确的方向前进。
我正在实现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对象对于所有操作都是相同的(我认为是这样),这是一个很好的实现还是我完全偏离这里并做错了?
答案 0 :(得分:0)
我会说你可能会这样,额外的Request-Response对象肯定不会伤害你。
例如,如果在某个阶段您发现您不断按ID删除某些条目,并且为此您经常需要创建一个填充了一个属性的完整请求对象,您始终可以创建一个扩展方法 - 甚至是本机类方法,如果您愿意 - 它将接受long id
并为您构建请求对象。
如果你只留下id,那么在某个阶段你可能需要请求对象,但修改会更加困难。