我现在的需求是,使用C/S模式进行开发,我想把ORM这块放到客户端执行,但是客户端不能够通过Connection连接数据库,而需要通过一个数据服务连接数据库。
请问,有没有一种ORM框架能够满足我的需求呢?

解决方案 »

  1.   

    没有。ORM 和 Connection 无关。事实上你应该封装成 Web Service,你可以在服务器上用 ORM。也可以不用。
    总之和客户端无关,ORM也没有封装连接的功能。
      

  2.   

    Castle框架!开源的,底层是Hibernet
      

  3.   


    你好,非常感谢你的回复,现在的问题是,我的业务逻辑接口很多,大约有100多个,如果我把业务逻辑接口放在服务端的话,那么就会有很多的服务或者服务中有很多的方法,我想避免这样做,所以我想把业务逻辑接口放在客户端实现,但是这样的话,ORM就无法直接连接数据库了!
    请问:碰到此类问题时,有没有较好的方法呢?
      

  4.   

    服务端提供实现,客户端提供接口,设计合理的话可以用AOP减少工作量
      

  5.   


    对于使用AOP减少工作量,我是否可以这样认为:
    1:对于业务逻辑中的通用操作(例如:添加,修改,删除),提供通用的接口实现。
    2:对于业务逻辑中的FindXX方法,有多少个就加多少个!
      

  6.   


    可能是我说的不太明白,我希望使用一种成熟的ORM框架,通常ORM框架都提供了基本业务逻辑功能,例如:通用的增删改查,事物等等,这样的话,ORM框架不就和Connection有关系了吗?
      

  7.   

    hibernate,
    entity frame,
    ibatis,
    .........
      

  8.   

    肯定需要配置了.
    一配置就好了,用过JSPSSH那几个框架的就很熟悉.
      

  9.   


    我的问题是,我需要在客户端运行ORM,但是,我不能保证客户端能够直接连接到数据库服务器,所以我不能使用配置数据库连接字符串的方式!
      

  10.   


    汗,这么上纲上线的!我没有表达过此类意思吧!我的想法是,我现在已经有了100多个业务逻辑接口,但是这些接口如果以服务的方式发布,那么服务就太多了,或者说,服务中的方法就太多了,所以我想把业务逻辑接口的实现放在客户端中(系统为C/S模型,客户端无法直接连接到数据库)。但是这样做的话,我还没有找到一个合适的ORM框架可以使用。
      

  11.   

    这个想法还有点靠谱,楼主的问题貌似和orm没关系,
    如果这些服务你们不能重构,
    那么你们可以弄一个隔离层,你管他多少个接口,抽象出不超过20个新的服务类型,
    客户端的代码可以大大减少,
    这就是基本的面向对象设计:统一描述和分层
      

  12.   

    可能是我说的不太明白,我希望使用一种成熟的ORM框架,通常ORM框架都提供了基本业务逻辑功能,例如:通用的增删改查,事物等等,这样的话,ORM框架不就和Connection有关系了吗?》》》
    说几句:
    ORM是指对象关系映射模型,很多人喜欢称为实体类,这是一个完全独立的且底层的东西,几乎没有业务方法,当然没有CRUD功能。通常的作法是:ORM实例化为对象后用于存储缓存的数据,比如一个字典数据,一张业务单据。提交数据是通过BLL->DAL->DB这个流程的,NHibernate或其它持久层架构只是负责将ORM的实例对象的数据通过SqlOleDb或其它DataProvider存储到数据库服务器的,NHibernate的思路是通过ORM的XML定义生动生成SQL, 然后枚举ILIst 对象生成一条条对应的SQL语句, 整个更新流程由一个事务完成。你的问题,根本原因是没有处理好分层,如果BLL, DAL是分离的,或者是分模块的,那么,不管改装为WebService或者 .Net Remoting, 或者Tcp/Ip, UDP 都不是问题, 你只需要在BLL与DAL之间增加一个中间层。关于中间层,这里有份资料参考:关于Winform开发框架桥接功能
    http://www.csframework.com/archive/5/arc-5-20110615-1601.htm桥接功能是建立客户端与服务端的通道(Chennel)
    http://www.csframework.com/cs-framework-3.0.htm----------------------------------------------------------------------------------------
    》》》16楼:
    你是想不去预先对服务进行业务分析,然后推卸给前端开发人员在“开发”时各自去搞数据库?这种软件作坊开发方法做不了你所说的100多个服务那样的系统的。>>>>你的回答脱离群众了,他需要人提供思路去解决问题而不是训斥。-------------------
    这个问题不是简单的ORM与CRUD, 架构级别了。 这里有几篇小文章去参考下:后台数据更新流程(DataTable,DataSet)
    http://www.csframework.com/archive/4/arc-4-20110401-1274.htmORM+SqlClient组件数据更新模型
    http://www.csframework.com/archive/4/arc-4-20110401-1275.htm希望对你有所帮助。
      

  13.   

    是内外网网闸交换数据???那好象不能使用ORM.
      

  14.   


    非常感谢你的回复。
    那么假设我现在已经将业务逻辑归类了,那么如果这些服务的实现,我想放到客户端执行,那么有没有成熟的orm框架可以使用呢?
      

  15.   

    回复:JonnySun》》》
    说几句:
    ORM是指对象关系映射模型,很多人喜欢称为实体类,这是一个完全独立的且底层的东西,几乎没有业务方法,当然没有CRUD功能。通常的作法是:ORM实例化为对象后用于存储缓存的数据,比如一个字典数据,一张业务单据。提交数据是通过BLL->DAL->DB这个流程的,NHibernate或其它持久层架构只是负责将ORM的实例对象的数据通过SqlOleDb或其它DataProvider存储到数据库服务器的,NHibernate的思路是通过ORM的XML定义生动生成SQL, 然后枚举ILIst 对象生成一条条对应的SQL语句, 整个更新流程由一个事务完成。
    我现在的问题是,没办法使用SqlOleDb,所以无法完成存储!
    那我有没有可能自己做DataProvider呢?就是通过网络,自己实现呢?
      

  16.   

    回复:JonnySun
    关于Winform开发框架桥接功能
    http://www.csframework.com/archive/5/arc-5-20110615-1601.htm桥接功能是建立客户端与服务端的通道(Chennel)
    http://www.csframework.com/cs-framework-3.0.htm后台数据更新流程(DataTable,DataSet)
    http://www.csframework.com/archive/4/arc-4-20110401-1274.htmORM+SqlClient组件数据更新模型
    http://www.csframework.com/archive/4/arc-4-20110401-1275.htm希望对你有所帮助。谢谢!
      

  17.   

    我想把ORM这块放到客户端执行,但是客户端不能够通过Connection连接数据库,而需要通过一个数据服务连接数据库。请问,有没有一种ORM框架能够满足我的需求呢?
    >>>1.ORM只是模型,是不能单独执行的。2.C/S系统不允许客户端直接连接数据库,而是通过Web服务或者.NetRemoting,UDP等通信管道把数据提交到后台处理,后台调用DAL层相关方法提交数据的。3.你提到的ORM中是否实现了业务逻辑,如增删改查(CRUD)功能???如果是这样的话不是ORM,而是BLL了。引用你的话:>>> 所以我想把业务逻辑接口放在客户端实现,但是这样的话,ORM就无法直接连接数据库了!方便贴出一段"ORM"相关的代码吗? 好让我们了解下程序架构。在不了解架构的情况下,还真找不到你想要的“框架”,我想最终这个“框架”需要你自己定制开发。
      

  18.   


    非常感谢你的回复。对于在服务端实现,没有什么问题,但是如果把业务逻辑实现放到客户端的话,而且在不能使用ADO.NET的情况下,有没有成熟的ORM框架提供使用呢?以下是业务逻辑相关的示例性代码(伪代码):数据模型(实体类)
    public class MyData
    {
       public string ID
       {
           get;set;
       }   public string Name
       {
          get;set;
       }   ....
    }业务逻辑接口定义
    public interface IXXXBL
    {    public IEnumerable<MyData> FindByXXX(...);    public void Add(MyData _data);    ...
    }
    业务逻辑本地实现(这块我想放到客户端运行,但是客户端无法访问Ado.Net)
    public class XXXProvider : IXXXBL
    {
        public IEnumerable<MyData> FindByXXX(...)
        {
            //通过参数进行查询,并返回结果
            //我所希望的ORM功能实现
        }    public void Add(MyData _data)
        {
           //保存指定的数据
            .....
        }    ...
    }
      

  19.   

    解决方案:http://www.csframework.com/upload/image/ORM_update.JPG
      

  20.   

    客户端不用考虑数据更新,交给服务端DAL层处理的,另外,接口就是一份合约,不能用XXXBLL命名而应该用ICustomerOperate或者ICustomerProvider命名。xxBLL这样写死了,就不像接口了。
      

  21.   

    非常感谢 JonnySun:你的回复描述的很清楚!这种解决方式我能够明白。
    但是我需要的是想把DAL放在客户端执行(并且使用ORM),基于这种需求是否有解决方案呢?
      

  22.   


    嗯!
    在实际情况中,我通常定义为IXXXServices,实现者通常定义为:XXXProvider。
      

  23.   


    把DAL移到客户端,违背了C/S逻辑,这种系统也不是CS系统了。如果对CS要求不高的话,基于你的描述我需要知道"需要通过一个数据服务连接数据库",这个数据服务是如何实现的呢?数据服务理论上是在服务端的。这个数据服务与你规划的BLL,DAL是什么关系呢?
      

  24.   


    把DAL移到客户端,违背了C/S逻辑,这种系统也不是CS系统了。第一次听说,请问这种说法有理论支持吗?或者其它经验性的?
    数据服务,客户端使用代理类,实现者是在服务端,接口如下(伪代码):public class DbProvider : IDbService
    {
        public DataSet Query(string _sqlString);
    }
      

  25.   

    如果把DAL移植到Client端:1. 在DbProvider .Query()方法内再调用服务端提供的接口返回数据。
    2. 跳过Server端, Query方法直接用SqlClient组件查询数据。只能组团定制开发,未有合适的开源框架。