我现在的需求是,使用C/S模式进行开发,我想把ORM这块放到客户端执行,但是客户端不能够通过Connection连接数据库,而需要通过一个数据服务连接数据库。
请问,有没有一种ORM框架能够满足我的需求呢?
请问,有没有一种ORM框架能够满足我的需求呢?
解决方案 »
- 紧急请教C#2008程序执行问题!
- c# 子窗体在父窗体中运行的属性如何设置?
- 这个该怎么实现啊?貌似很简单 我就是不会。。求指点。。
- 求 richtextbox 插入表情图片(gif)的方法
- Developer Express v2009
- 怎么把这段javascript函数转换成C#...
- 输入的字符串格式不正确
- FileStream.Copyto问题
- 怎么样获得硬盘的序例号(急)
- 怎样才能得到一个object的name属性[C#]
- 求高手帮忙:函数求值超时,函数求值被禁用
- GDI+绘图,为什么Form1_Paint(object sender,PaintEventArgs e)事件没有执行?
总之和客户端无关,ORM也没有封装连接的功能。
你好,非常感谢你的回复,现在的问题是,我的业务逻辑接口很多,大约有100多个,如果我把业务逻辑接口放在服务端的话,那么就会有很多的服务或者服务中有很多的方法,我想避免这样做,所以我想把业务逻辑接口放在客户端实现,但是这样的话,ORM就无法直接连接数据库了!
请问:碰到此类问题时,有没有较好的方法呢?
对于使用AOP减少工作量,我是否可以这样认为:
1:对于业务逻辑中的通用操作(例如:添加,修改,删除),提供通用的接口实现。
2:对于业务逻辑中的FindXX方法,有多少个就加多少个!
可能是我说的不太明白,我希望使用一种成熟的ORM框架,通常ORM框架都提供了基本业务逻辑功能,例如:通用的增删改查,事物等等,这样的话,ORM框架不就和Connection有关系了吗?
entity frame,
ibatis,
.........
一配置就好了,用过JSPSSH那几个框架的就很熟悉.
我的问题是,我需要在客户端运行ORM,但是,我不能保证客户端能够直接连接到数据库服务器,所以我不能使用配置数据库连接字符串的方式!
汗,这么上纲上线的!我没有表达过此类意思吧!我的想法是,我现在已经有了100多个业务逻辑接口,但是这些接口如果以服务的方式发布,那么服务就太多了,或者说,服务中的方法就太多了,所以我想把业务逻辑接口的实现放在客户端中(系统为C/S模型,客户端无法直接连接到数据库)。但是这样做的话,我还没有找到一个合适的ORM框架可以使用。
如果这些服务你们不能重构,
那么你们可以弄一个隔离层,你管他多少个接口,抽象出不超过20个新的服务类型,
客户端的代码可以大大减少,
这就是基本的面向对象设计:统一描述和分层
说几句:
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希望对你有所帮助。
非常感谢你的回复。
那么假设我现在已经将业务逻辑归类了,那么如果这些服务的实现,我想放到客户端执行,那么有没有成熟的orm框架可以使用呢?
说几句:
ORM是指对象关系映射模型,很多人喜欢称为实体类,这是一个完全独立的且底层的东西,几乎没有业务方法,当然没有CRUD功能。通常的作法是:ORM实例化为对象后用于存储缓存的数据,比如一个字典数据,一张业务单据。提交数据是通过BLL->DAL->DB这个流程的,NHibernate或其它持久层架构只是负责将ORM的实例对象的数据通过SqlOleDb或其它DataProvider存储到数据库服务器的,NHibernate的思路是通过ORM的XML定义生动生成SQL, 然后枚举ILIst 对象生成一条条对应的SQL语句, 整个更新流程由一个事务完成。
我现在的问题是,没办法使用SqlOleDb,所以无法完成存储!
那我有没有可能自己做DataProvider呢?就是通过网络,自己实现呢?
关于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希望对你有所帮助。谢谢!
>>>1.ORM只是模型,是不能单独执行的。2.C/S系统不允许客户端直接连接数据库,而是通过Web服务或者.NetRemoting,UDP等通信管道把数据提交到后台处理,后台调用DAL层相关方法提交数据的。3.你提到的ORM中是否实现了业务逻辑,如增删改查(CRUD)功能???如果是这样的话不是ORM,而是BLL了。引用你的话:>>> 所以我想把业务逻辑接口放在客户端实现,但是这样的话,ORM就无法直接连接数据库了!方便贴出一段"ORM"相关的代码吗? 好让我们了解下程序架构。在不了解架构的情况下,还真找不到你想要的“框架”,我想最终这个“框架”需要你自己定制开发。
非常感谢你的回复。对于在服务端实现,没有什么问题,但是如果把业务逻辑实现放到客户端的话,而且在不能使用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)
{
//保存指定的数据
.....
} ...
}
但是我需要的是想把DAL放在客户端执行(并且使用ORM),基于这种需求是否有解决方案呢?
嗯!
在实际情况中,我通常定义为IXXXServices,实现者通常定义为:XXXProvider。
把DAL移到客户端,违背了C/S逻辑,这种系统也不是CS系统了。如果对CS要求不高的话,基于你的描述我需要知道"需要通过一个数据服务连接数据库",这个数据服务是如何实现的呢?数据服务理论上是在服务端的。这个数据服务与你规划的BLL,DAL是什么关系呢?
把DAL移到客户端,违背了C/S逻辑,这种系统也不是CS系统了。第一次听说,请问这种说法有理论支持吗?或者其它经验性的?
数据服务,客户端使用代理类,实现者是在服务端,接口如下(伪代码):public class DbProvider : IDbService
{
public DataSet Query(string _sqlString);
}
2. 跳过Server端, Query方法直接用SqlClient组件查询数据。只能组团定制开发,未有合适的开源框架。