ORM框架有无必要?
疑问:
1、ORM从未逃离 数据库的影子, 既然无从逃离, 为何又要执著于ORM呢?
2、有些时候实现一个复杂的SQL后台查询,用程序语言(非SQL (我也走过弯路,用了被MS鼓吹的linq, 以及linqtosql ))实现起来相当有难度, 既然如此为何还要把复杂度为一度的问题变为二度、三度甚至N度呢
基于此, 我做了以下的处理 ,见 {方案}
3、这样做是不是真的减轻了开发的工作量?不好意思,并没有减轻。针对于直接用SQL访问的(JDBC或者ADO.net)相对而言是加重了。
但是把在关注点转移了业务中的逻辑实现,复杂度放在UI层与用户交互上。
如何设计你的Query, 传入参数到IQuery;
配置层XML如何去写你的SQL语句;
程序主体业务关不关注这些, 程序只是关注接口(只关注IQuery)。
对于XML层 部分可以写代码自动生成,复杂的SQL还是要人工干预,界面UI的复杂查询也是需要人为处理的。
4、可扩展性和引入其它 大家可以参见 martin flower的企业设计模式架构
------------------------------------------------------------------------------------------------------------------
{方案}:
刚刚学java想找出与ms entrprise library相媲美的库,度娘告之有apache commons dbutils ,主要相中了其tobean,的确是个好东东
下面是我的思路,请大家指证(以下语法为C#,不过思路是相通的)
public abstract class absRepository<T,Key> : IRepository<T,Key> where T : class, new()
{
SQLHelper db = new SQLHelper(); // java调用apache commons dbutils, .net中用的是ms entrprise library IDataReaderEntityBuilder<TResult>.CreateBuilder(datarow);
public abstract string OwnerName { get; }//可以取自某配置获取内容
}
public interface IRepository<T, Key>
{
/// <summary>
/// 对象标识
/// </summary>
string OwnerName { get; }
IList<T> GetByCriteria<Query>(Query query);
IList<T> GetByCriteria<Query>(Query query, int pageIndex, int pageSize, out int pageCount);
int GetCount<Query>(Query query);
bool Contains(Key key);
T Get(Key key);
bool Create(T t);
bool Update(Key key, T t);
bool Remove(Key key);
Key Get(T t);
bool Equals(Key l, Key r);
}
public interface IQuery
{
/// <summary>
/// 查询编号,或者查询语句
/// </summary>
/// <returns></returns>
string getNo();
object[] getParams();
}
public interface ISortQuery : IQuery
{
string sort { get; set;}
}
[该贴被bigmouthz于2012-07-31 13:39修改过]