面向?qū)ο箝_發(fā)一個最重要的思想就是對真實世界進行模擬。
然而﹐在大量的使用面向?qū)ο笳Z言開發(fā)的系統(tǒng)中﹐您卻很難看到這種模擬﹐而依然是些以數(shù)據(jù)庫為中心的增刪改查動作﹐ " /> 性色AV乱码一区二区三区视频,九九热在线观看视频,女人把腿张开叫男人桶免费视频

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

領(lǐng)域模型﹐打開OO的另一扇窗

園子里這么多討論OO的﹐我也來湊一下熱鬧吧。

 
面向?qū)ο箝_發(fā)一個最重要的思想就是對真實世界進行模擬。

 
然而﹐在大量的使用面向?qū)ο笳Z言開發(fā)的系統(tǒng)中﹐您卻很難看到這種模擬﹐而依然是些以數(shù)據(jù)庫為中心的增刪改查動作﹐很少能看到
真實的世界的身影。

 
出現(xiàn)這種情況﹐很大程度上都是受數(shù)據(jù)庫為中心的影響。

 
以數(shù)據(jù)庫為中心開發(fā)系統(tǒng)﹐有一套成熟的理論﹐也經(jīng)歷住了多年的考驗﹐是到今天為止﹐大部分信息系統(tǒng)開發(fā)時的不二選擇。

 
以一個圖書管理系統(tǒng)為例﹐有這樣的一些功能﹕新書上架﹐借閱﹐歸還。

 
按照數(shù)據(jù)庫方法﹐我們會設計出這樣的三個關(guān)系﹕

書籍(BookID,ISBN﹐書名﹐作者﹐出版社﹐內(nèi)容簡介)

借書證(CardID﹐姓名﹐電話﹐身份證號﹐地址)

借閱(BookID,CardID,借閱時間,歸還時間,)

 
然后在數(shù)據(jù)庫中建表

 
接下來提供書籍新增﹐刪除﹐修改﹐查詢﹐借書證增刪改查﹐圖書借閱﹐歸還的人機界面

 
再圍繞數(shù)據(jù)庫編寫增刪改查對象和方法
。大家爭論的Book.SaveBookManager.Save方法也是在此吧。其實只要不重復代碼﹐使用起來方便﹐高效﹐統(tǒng)一﹐無論將Save方法放在哪﹐都是有其道理的。

 
對于大部分信息系統(tǒng)﹐以數(shù)據(jù)庫為中心是十分合適的﹐這種方法也是非常高效且成熟。

 
然而﹐您還是可以嘗試另外一種方法

 
我們想象這樣的場景﹕

 
有一個
[圖書館]

[圖書館]里有很多[書架](可以理解為﹕書籍分類目錄)

[書架]上有很多[書籍]

一個讀者進入系統(tǒng)﹐系統(tǒng)幫助他瀏覽[圖書館][書架],然后在其中一個[書架]中找到了他想借閱的[書籍]﹐接下來﹐它將[借書證]交給管理員﹐要求借閱該[書籍]﹐管理員辦理借閱手續(xù)﹐產(chǎn)生一筆[借閱記錄]﹐完成借書過程

 
這個場景可以由下面這個對象完成

 
Class
圖書館幫助者

{

       

        PublicList<書架> 所有書架

{

                Return 圖書館.Instance.所有書架  

        }

 

        Public void 選擇書架(書架)

        {

                記錄當前書架

}

 

Public void 選擇圖書(圖書)

{

記錄所選圖書
}

 

        Public void 借閱(借書證)

        {

                If(借書證.借出記錄!=null)

                        ThrowException “該書已借出”;

                New 借閱記錄();

                借閱記錄.Book= 當前圖書

                借閱記錄.Card= 借書證

                借閱記錄.時間 =Now

                當前圖書.借出記錄 =借閱記錄

                借書證的借閱記錄.Add(借閱記錄)

}

}

 

這就是借書的用例實現(xiàn)﹐而這些對象則是系統(tǒng)領(lǐng)域模型中的對象。

沒有數(shù)據(jù)庫﹐沒有UI﹐只有業(yè)務以及邏輯。

 

當您開發(fā)人機界面時﹐您可以選擇windows﹐也可以選擇web﹐它使用這個類 (顯示書架﹐選擇一個書籍﹐顯示書架中的書籍﹐選擇一本書﹐借閱按鈕)完成了借閱功能

 

自始至終﹐我們的設計中均未出現(xiàn)數(shù)據(jù)庫

 

我們的系統(tǒng)做為一個真實世界的模型﹐已經(jīng)足夠.上架時﹐只要new 書籍﹐加入書架就可以﹐辦理借書證﹐也只需要new借書證,同樣﹐歸還書籍時﹐只要將借出記錄與書籍的關(guān)聯(lián)取消即可﹐一切良好。

 

然而這種理想的環(huán)境是不存在的﹐這樣我們才有了對象持久化的概念﹐數(shù)據(jù)庫作為一個穩(wěn)定﹐高效的持久方案﹐就是不錯的選擇(我以前也試過將所有對象以二進制文件形式間隔備份到硬盤上的方法完成持久)

 

至于系統(tǒng)中的對象與數(shù)據(jù)庫的表格如何轉(zhuǎn)換﹐ORM就開始派上用場了。

然而請記住一條﹐在使用數(shù)據(jù)庫存對象時﹐請千萬不要和領(lǐng)域模型耦合在一起了(不要在借閱方法中﹐來一句Book.Insert代碼﹐我們的領(lǐng)域?qū)ο笾皇腔ハ嘀g有關(guān)系﹐而和數(shù)據(jù)庫是沒關(guān)系的﹐我們的數(shù)據(jù)庫保存的是當前系統(tǒng)中的對象及其狀態(tài))﹐設計模式呀﹐AOP呀﹐這時候是他們大顯身手的時候了

 

(順便說一句﹕一直以來﹐我認為以數(shù)據(jù)庫為中心而又采用ORM的系統(tǒng)設計方案可以說非常憋屈的﹐好好得實現(xiàn)您的增刪改查﹐下SQL﹐連數(shù)據(jù)庫不就行了﹐硬是插一腳O/RMapping﹐讓十分強大的SQL,變成笨手笨腳的對象方法﹐不難受才怪。)

 

其實,微軟在NET框架中提供的以數(shù)據(jù)庫為中心的類別和工具都已十分強大了﹐像ADO.NET,DataSet﹐類型化的DataAdapter自動生成﹐以及前端的GridView控件都適合于開發(fā)信息系統(tǒng)﹐大部分簡單的系統(tǒng)我都會直接使用﹐但是﹐當C#為你提供的如此完美的一個面向?qū)ο笳Z言﹐您又怎么能不嘗試一下真正的面向?qū)ο箝_發(fā)呢?

it知識庫領(lǐng)域模型﹐打開OO的另一扇窗,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人精品免费视频软件 | 国产成人女人在线视频观看 | 中国大陆一级毛片免费 | 被送到黑人性奴俱乐部 | 父亲在线日本综艺免费观看全集 | 国产嫩草在线观看 | 久久国产亚洲精品AV麻豆 | 午夜男人免费福利视频 | 蜜臀AV精品久久无码99 | 欧美阿v天堂视频在99线 | 精品久久久久久久久免费影院 | 18黄女脱内衣 | 草久热的视频在线观看 | 射死你天天日 | 久久欧洲AV无码精品色午夜麻豆 | 麻豆国产成人AV在线 | 亚洲 欧美 日韩 国产 视频 | 亚洲欧美国产综合在线 | 国产精品18久久久久久欧美网址 | 女人精69xxxxx| 欧美最猛性XXXXX肛交 | 亚洲精品无码久久久久A片 亚洲精品无码国产爽快A片百度 | 精品亚洲AV无码蜜芽麻豆 | 日本熟妇乱人伦A片精品软件 | 精品三级久久久久电影网1 精品日韩视频 | 噼里啪啦免费观看视频大全 | 天天插天天射天天干 | 国产 交换 丝雨 巅峰 | 国产精品久人妻精品 | 处女座历史名人 | 岛国大片在线播放免费 | 久久99久久成人免费播放 | 亚洲免费黄色片 | 国产综合无码一区二区色蜜蜜 | 91原创在线| 在线观看视频国产 | 囯产精品久久久久免费蜜桃 | 芳草地在线观看免费视频 | 国产Av男人的天堂精品良久 | 好男人在线观看视频观看高清视频免费 | 囯产免费精品一品二区三区视频 |