创建服务以封装业务查询

时间:2011-06-30 18:24:16

标签: database wcf

我们有几个(5 +)个应用程序访问同一个数据库,我们遇到的问题是,应用程序都会自己动手构建获取相同数据的查询。但是,由于不同的开发人员正在创建这些查询,因此它们应该不同,因此会不时返回不同的结果。

据我所知,有两种可能的解决方案。

  1. 创建每个应用程序引用的库以获取正确的查询
  2. 创建一个WCF服务,该服务封装每个应用程序使用的常见查询,并为每个要使用的应用程序创建客户端
  3. 我倾向于选项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交互的客户端。

    所以我的问题是什么是创建查询服务的一般方法,其唯一目标是封装几个应用程序的常用查询/操作?

1 个答案:

答案 0 :(得分:1)

您已经回答了自己的问题。从本质上讲,您希望从实现中分离接口,就像Web服务(或WCF)将完成一样。如果您创建一个程序集,您仍然需要确保程序集与您的单独客户端一起部署,或者至少在任何使用它的应用程序可访问的位置。似乎还有很多工作要做。但是,请记住,如果您对服务签名进行更改,则使用该服务的任何客户端也必须更新以反映新定义。

Web服务(WSDL)的优点在于它是通用的。您可以使用任何可以使用和解析WSDL的语言编写客户端 - 与程序集不同,您可以将程序集定位到特定的构建或操作系统。因此,无论您拥有C#,Java,iOS,Android等客户,他们都可以使用您的服务。