今天也不知道哪根筋不對了,沒有打Dota卻想寫一篇文章,其實自己也不知道寫什么,專業技術較水,但真的很想寫,自己文采又不夠,所以還是只能寫技術方面的文章啦!半瓶子還是可以晃蕩晃蕩的哈哈~ NOSQL近來勢頭不錯,MongoDB更是其中的嬌嬌者,自己學nosql的
今天也不知道哪根筋不對了,沒有打Dota卻想寫一篇文章,其實自己也不知道寫什么,專業技術較水,但真的很想寫,自己文采又不夠,所以還是只能寫技術方面的文章啦!半瓶子還是可以晃蕩晃蕩的哈哈~
NOSQL近來勢頭不錯,MongoDB更是其中的嬌嬌者,自己學nosql的時候也是參考了大量的資料,最終決定要從MongoDB入手的,最重要的原因有兩點:1自己是簡單的愛好者,一切問題我都在想是否有簡單的方法解決,寧可停下來去思考大量時間,也不愿用笨方法馬上去做,而MongoDB的操作大都很簡單,2自己是JS的愛好者,沒事就喜歡拿一本js的本從頭到尾看一邊,也不管記住多少,也不管用不用得到,就是喜歡,MongoDB以BSON格式存儲,所以操作也起來也算得心應手!現在做一個項目正是用MongoDB做為數據庫的,一開始沒有DAL,BLL直接訪問數據庫,然后就到UI了,空間,而且BLL是全靜態的(我喜歡靜態方法的調用簡單,但狠靜態類的不能繼承!),當時考慮的是用MongoDB的驅動去操作太直白了!感覺沒必要再寫個DAL!,后來知道我想法還是很天真的,哈哈!下面就說現在的操作方式吧~
一、Module層
[Serializable] user { public ObjectId id; public string n; public int age; public Birthday birth; Birthday { public int y; public int m; public int d; } }
咋一看,虛擬主機,有幾個地方不規范,1類名首字母和公開字段沒有大寫,2公開的字段,而沒有用屬性,3字段命名沒表達它的意思。現在逐個解釋一下,類名和字段沒大寫首字母主要是數據庫里的命名是遵循js的,用js表示時大家一般會這樣寫:
var user={id:ObjectId("123456"),n:"loogn",age:23,birth:{y:19,m:7,d:7}}
然而,可能有人會說可以用MongoDB.Bson.Serialization.Attributes.BsonElement這樣一個Attribute關聯呢!不過我不會那樣做,原因就是太麻煩了!這里可能還是有疑問,留到第3個問題說。
公開字段而沒有用屬性也是不合常理的,學校老師都交過,不管你能不能理解,反正就是要私有化字段,想公開請用屬性,哈哈!不過我想了很久還是不走尋常路了,目前為止用字段沒有出現過缺陷問題,我不保證以后不會,但我感覺幾率十分小,就算真的有什么問題必需要用屬性,后面加上{get;set;}也不麻煩吧!屬性畢竟還是方法,用屬性有多余的方法調用開銷,而且實體類本來就是不尋常的類,一般只表示對象狀態(用字段),屬性里如果有邏輯(就像老師常說的年齡不能小于0且不能大于150等等!),你會放到這里做嗎?顯然你都是放在BLL里做!字段命名太短了沒有表達它的意思,其實這個可以和第一個一起來說,MongoDB是無模式的,同一個合集可以保多個不規則的文檔,如user集合:
{id:1,n:"user1",desc:"我的描述"} {id:2,n:"user2"}
所以數據庫必須保存文檔的每一個元素的name(即id,name,desc,id,name),所以元素name越短越節省空間,本來是用name更能表達的,這里用了n,其實只要把常用的約定一下,絕大部分人都是可以接受的。
在user里還有個內嵌類Birthday,而這個類大寫了首字母,我是這樣考慮的,內嵌類名全部按C#命名規范,因為容器類有一個該內嵌類類型的字段,這里是birth,但如果找不到合適的縮寫怎么辦呢,直接小寫內嵌類名就可以了,如內嵌城市類City,字段名為city就不會重復了。
二、DAL層
在這一層要寫一個基類,完成這個基類后,其他的各各DAL類都是浮云了~,在寫基類之前有一個MongoHelper,MongoHelper很簡單,直接給出代碼且不寫解釋:
MongoServer
public class MongoHelper { static readonly MongoConnectionStringBuilder ConnectionStringBuilder; static MongoHelper() { ] != null) { ConnectionStringBuilder = ].ConnectionString); } ] != null) { ConnectionStringBuilder = ].ConnectionString); } else { ); } } public static MongoServer GetServer(string connectionString) { var server = MongoServer.Create(connectionString); return server; } public static MongoServer GetServer() { var server = MongoServer.Create(ConnectionStringBuilder); return server; } public static MongoDatabase GetDatabase(string databaseName) { return GetServer().GetDatabase(databaseName); } public static MongoDatabase GetDatabase() { return GetDatabase(ConnectionStringBuilder.DatabaseName); } }
完了后就可以寫BaseDAL了,如果沒有泛型,DAL的工作還真是索然無味,但現在用泛型DAL的工作有趣多了,先承上代碼:
數據訪問層基類
BaseDAL
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com