我们有几个(5 +)个应用程序访问同一个数据库,我们遇到的问题是,应用程序都会自己动手构建获取相同数据的查询。但是,由于不同的开发人员正在创建这些查询,因此它们应该不同,因此会不时返回不同的结果。
据我所知,有两种可能的解决方案。
我倾向于选项2,因为这样可以让我们灵活地修改我们在查询中使用的过滤器,从而立即更新每个应用程序。
服务层次结构看起来像
public class QueryService
{
private readonly IRepository _repository;
public QueryService(IRepository repository)
{
_repository = repository;
}
public IEnumerable<int> GetCommonOperation()
{
return _repository.GetCommonOperation();
}
public IEnumerable<AnotherDto> AnotherCommonOperation()
{
return _repository.AnotherCommonOperation();
}
}
然后创建一个与QueryService
交互的客户端。
所以我的问题是什么是创建查询服务的一般方法,其唯一目标是封装几个应用程序的常用查询/操作?
答案 0 :(得分:1)
您已经回答了自己的问题。从本质上讲,您希望从实现中分离接口,就像Web服务(或WCF)将完成一样。如果您创建一个程序集,您仍然需要确保程序集与您的单独客户端一起部署,或者至少在任何使用它的应用程序可访问的位置。似乎还有很多工作要做。但是,请记住,如果您对服务签名进行更改,则使用该服务的任何客户端也必须更新以反映新定义。
Web服务(WSDL)的优点在于它是通用的。您可以使用任何可以使用和解析WSDL的语言编写客户端 - 与程序集不同,您可以将程序集定位到特定的构建或操作系统。因此,无论您拥有C#,Java,iOS,Android等客户,他们都可以使用您的服务。