我經常應用c#開發一些小的桌面程式,這些桌面程式往往有以下幾個特點:
程式比較小,開發周期很短。
程式的資料量不大,多數情況下不超過1萬行記錄。
對程式的效能要求不高。
程式併發很少或者基本沒有。
盡量程式部署簡單。
因為c#程式很多情況下都是curd,結合上面的需求,我一直考慮做乙個簡單的框架,以達到快速開發的目的。應用xml序列化(xmlserializer)功能,我開發了乙個簡單符合上面要求的底層框架。
框架思路
我準備用xml檔案作為資料儲存,為了保證資料同步,同時在記憶體中儲存乙份資料,每次操作時,都是操作記憶體中的資料,操作完之後再同步到資料庫中。
另外,為了保證框架的易用性,我把底層實現寫成了乙個泛型類,所有操作類繼承此泛型類。
框架主要包括以下幾個功能:
應用xml檔案作為資料庫,不依賴其他資料庫系統。
對外提供基本的curd功能。
減少配置,做到0配置。
資料會儲存在執行目錄下面的data目錄下,資料檔案可以由開發者指定,也可以採用預設資料檔案。
如何應用框架進行開發呢?我把框架打成了乙個dll檔案,開發專案時,需要引用這個dll。開發者每定義乙個實體類,需要對應定義乙個操作類,此操作類需要繼承我的泛型操作類。
注意:實體類需要有乙個string型別的id,我一般用guid
實體類示例**:
namespace zdash
public string key
public string lang
public byte realcontent
}}
我把操作類寫成了單例模式,操作類示例**:
namespace zdash
public static codebll getinst()
}}
如何應用:
codebll.getinst().insert(entity);
xml檔案的內容
<?xml version="1.0"?>1符號
c#e1
2符號1
c#e1
由上面的例子可以看到,應用此框架進行開發還是非常容易的。
總結框架優點:
快速開發,完全不需要考慮底層
易於部署
框架**比較短小,總共200行左右。
框架缺點:
效率低下
未考慮併發,非執行緒安全
附:框架源**
using system;
using system.collections.generic;
using system.io;
using system.reflection;
using system.xml.serialization;
namespace wisdombud.xmldb
setdbfile = value;
this.readdb();}}
private listentitylist = new list();
private xmlserializerbll()
private void setdbfile()
type type = typeof(t);
if (string.isnullorempty(this.dbfile))
}catch (exception ex)
}public static xmlserializerbllgetinstance()
return instance;
}public void insert(t entity)
public void insertrange(ilistlist)
public system.collections.generic.listselectby(string name, object value)
type t = typeof(t);
foreach (var inst in this.entitylist)}}
}return list;
}public t selectbyid(string id)}}
}return default(t);
}public void updatebyid(t entity)
}this.deletebyid(id);
this.insert(entity);
}public void deletebyid(string id)}}
}finishloop:
this.entitylist.remove(entity);
this.writedb();
}public listselectall()
public void deleteall()
private void writedb()
stream writer = new filestream(this.dbfile, filemode.create, fileaccess.readwrite);
ks.serialize(writer, this.entitylist);
writer.close();
}private void readdb()
else}}
}
using system.collections.generic;
namespace wisdombud.xmldb
set
}private xmlserializerbllbll = xmlserializerbll.getinstance();
public void delete(string id)
public void insert(t entity)
public void insert(listlist)
public system.collections.generic.listselectall()
public void update(string oldid, t entity)
public t select(string id)
public system.collections.generic.listselectby(string name, object value)
public void deleteall()
}}
xml在資料庫中的應用
1。將xml文件儲存為乙個文字塊 create a table to hold the manuals for the games statement s conn.createstatement s.executeupdate create table manuals gameid int,man...
基於XML的資料庫開發 2
本章主要介紹一下xml資料庫中sql語言解析的問題。現在解析sql基本是使用了類似字尾表示式的解析方法,具體如下 比如有乙個sql語言是這樣的 a 1 b 2 如果我們現在將它轉換成具體sql動作如下,則會變成下面的樣子 a 1 b 2 與字尾表示式很相近,主要區別在於 的判斷上。演算法如下 首先規...
在資料庫應用系統中資料庫的開發
在資料庫應用系統中資料庫的開發 乙個成功的資訊管理系統由50 的業務 50 的軟體組成 而50 的軟體又是由25 的程式 25 的資料庫組成。由此可見資料庫在資訊管理系統中佔的重要位置,或許會有人說了 資料庫不就是建幾張表嗎?有那麼重要嗎?如果按照你說的那樣,既然ms已經有了vb 大家都知道vb中自...