我是ServiceStack的新手,为了了解它的工作原理,我将为Northwind数据库开发一个web (使用存储库模式)。
我检查了示例项目ServiceStack.Northwind,只有两个服务(客户和订单)。我想开发一个完整的API (客户、订单、产品等)。有点像马特·考恩。
基本上,所有服务都会对任何操作执行相同的操作:
为此,我考虑创建一个基类来完成几乎所有的工作。首先,我开始做这样的事情:
public class BaseService<TRepository, TEntity, TDto> : Service
{
...
}这个类的问题是,我不知道每个操作的请求和响应类型。所以我想把它们作为类型参数来传递:
public class BaseService<TRepository, TEntity, TDto, TRequest, TSingleResponse, TCollectionResponse> : Service
{
...
}我不喜欢这样。我确信,不需要向类传递n个类型的参数,就可以做到这一点。
我如何看待这个基类的发展?
先谢谢你。
发布于 2013-05-15 09:44:47
您可以使用以下建议来减少类型参数的数量:
TEntity作为对单个实体上的操作的请求/响应IRepository<TEntity>以避免存储库类型参数至于返回实体列表的操作(例如。FindCustomers,FindOrders) --每个操作可能都有唯一的搜索参数,无论如何,您都需要在派生类中实现它。
public class BaseEntity
{
public int Id { get; set; }
// ...
}
public interface IRepostory<TEntity> where TEntity : BaseEntity
{
IList<TEntity> GetAll();
TEntity Get(int id);
void Save(TEntity entity);
// ...
}
public class BaseService<TEntity, TCollectionRequest> : Service
where TEntity : BaseEntity
{
public IRepository<TEntity> Repository { get; set; }
public virtual object Get(TEntity request)
{
return Repository.Get(request.Id);
}
public virtual object Get(TCollectionRequest request)
{
return Repository.GetAll();
}
public virtual object Post(TEntity request)
{
Repository.Save(request);
return request;
}
public virtual object Put(TEntity request)
{
// ...
}
// ...
}https://stackoverflow.com/questions/16547663
复制相似问题