ORM框架有無必要?

bigmouthz發表於2012-07-31
疑問:
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修改過]

相關文章