<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    openfans領域模型驅動的嘗試

    領域模型驅動( Domain Driven Design ),很熱的名詞。 Openfans ,不太熱的網站。今天俺就借著很熱的 ddd ,給不太熱的 openfans 再造點勢。 Openfans 就不多介紹了,網站用 spring+hibernate 為核心的一堆開源軟件構建。有了 spring IOC hibernate ORM ,打著 ddd 的旗號也就名正言順了很多。先聲明其實俺對 ddd 的理解也多是道聽途說,沒有什么系統的學習過,倒是和 Joe 阿牛討論過幾次,頗有受益,他對這個理解還是很深刻的。

    言歸正傳,就講 openfans 現在經 ddd 思想改造過的模型。整體上看還是普通的三層架構體系:展現層、業務層、持久層。展現層用 spring mvc ,力圖做到只是展示相關,避免出現業務邏輯。再具體細分,就是 jsp 頁面只有展示邏輯,主要使用 jstl 完成顯示功能。 Controller 負責從頁面獲得參數、把數據傳回頁面、控制頁面流傳和調用業務層的接口。持久層使用 hibernate ,在設計上我不是按 dao 方式為每個對象建立相應的 dao ,也不是 ddd 推薦的每個 domain 一個 repository ,而是分成了 Persistence Fetcher2 個接口。 Persistence 處理持久相關如 save remove 方法, Fetcher 則處理 get 相關。這樣分的原因也很簡單, persistence 是很穩固的,對象都可以共用一個接口如 save Object ),而 fetcher 就千變萬化,需要分頁、排序等接口。

    這樣設計是與業務層架構相關的。我采用的是 domain 對象(簡稱 DO + 一層薄薄 fa?ade 的方式。 DO 處理自身的邏輯,包括持久功能。本身 DO 是沒有持久能力的,需要依靠注入的 persistence 接口,這里就體現按 Persistence Fetcher 分開的一個好處, persistence 所有 DO 可以共用一個,給編程帶來了方便。 Openfans 中采用的是 DO 繼承一個抽象 PersistentObject 類的方式,這樣 DO 方便的獲得了注入的能力和持久的能力。這樣做有何優缺點還需要做些討論,為了方便我也就先這么用。 PersistentObject 代碼如下:

    public abstract class PersistentObject implements NeedPersist {

    ?????? private Persistence persistence;

    ?

    ?????? public void save() {

    ????????????? persistence.save(this);

    ?

    ?????? }

    ?

    ?????? public void remove() {

    ????????????? persistence.remove(this);

    ?????? }

    ?

    ?????? public void setPersistence(Persistence persistence) {

    ????????????? this.persistence = persistence;

    ?????? }

    ?

    ?????? public Persistence getPersistence() {

    ????????????? return persistence;

    ?????? }

    }

    這樣 DO 只需要注入 persistence 就獲得了持久的能力,而且可以把這種能力往下傳遞。 DO 獲得了持久能力,就有點接近富血模型的想法了,他能夠處理一些業務,做持久然后調用引用對象的業務和持久方法 ( 從另外的角度看持久與業務其實是分不開的 ) 。這樣把業務封裝在了領域本身,更適于用領域對象出發的方式去思考問題。領域層的 fa?ade 主要是為了 Transaction 管理和隱藏 DO 接口。這樣 DO 的業務方法都可以設置成 friendly ,僅相互間可見。 Fa?ade 就放在 domain 包中,它負責給 DO 注入 persistence bean ,調用 DO 的接口,提供給 controller 一個 use case 級別的接口,同時它也代理 fetcher 的接口。

    有了這個架構,實現起來也不復雜,要配置的 bean 很少(現在還沒有使用 spring 2.0 DO 配置在容器中)。設計就從 DO 出發,明確它的屬性和方法,讓 hibernate 自己生成數據庫表。

    ?????? 這樣設計也算是一次嘗試吧,其中肯定有很多考慮不周的地方,需要不斷的討論和改進。

    posted on 2006-05-22 18:28 pesome 閱讀(1389) 評論(4)  編輯  收藏 所屬分類: 系統架構

    評論

    # re: openfans領域模型驅動的嘗試 2006-05-25 09:27 D.B

    與我去年項目中對DomainModel的設計實現相似,
    跟一般理解的DomainModel不同,這樣的DomainObject是全功能的DomainObject(包括業務邏輯和持久化處理),
    優點是Do的客戶端可以比較省心(就像EntityBean,客戶端不需要關心持久化),
    缺點是DomainObject層依賴Dao層(這是大師們所反對的)。  回復  更多評論   

    # re: openfans領域模型驅動的嘗試 2006-05-25 13:50 pesom

    呵呵,好容易找到個參與討論的。理想狀況是透明持久化,但由于設施還不完善,現在較難做到。用hibernate,如果do在session中,是不需對持久層產生依賴的,但不在session中的那些對象(如表單過來的對象)呢?do具備了能力,從封裝、耦合和重用的角度看,還是很有益處的。歡迎大家多做討論,可以到openfans上去討論,呵呵!  回復  更多評論   

    # re: openfans領域模型驅動的嘗試 2007-02-02 18:22 pig345

    與我去年項目中對DomainModel的設計實現相似,
    跟一般理解的DomainModel不同,這樣的DomainObject是全功能的DomainObject(包括業務邏輯和持久化處理),
    優點是Do的客戶端可以比較省心(就像EntityBean,客戶端不需要關心持久化),
    缺點是DomainObject層依賴Dao層(這是大師們所反對的)
    -------------------------------------------------
    深有同感,
    一直沒搞清楚 業界的大師們是如何在保持富血模型的同時--讓DomainObject層與Dao層不相依賴的。
    起碼從現在的普遍應用的技術上看似乎是不可能的。  回復  更多評論   

    # re: openfans領域模型驅動的嘗試 2007-03-25 14:32 coolfish

    現在看來domain object的所依賴的一些持久化的操作(DAO)的,需要借助AOP和spring 的注入來實現。  回復  更多評論   

    <2006年5月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導航

    統計

    公告

    主要記錄作者在學習java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創,如需轉載請注明出處和原作者,如用于商業目的,需跟作者本人聯系。
    歡迎大家訪問:

    常用鏈接

    留言簿(16)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    java技術

    人間百態

    朋友們的blog

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 羞羞漫画登录页面免费| 免费人成动漫在线播放r18| 免费国产99久久久香蕉| 久久精品亚洲福利| 久久久久久av无码免费看大片| 啊v在线免费观看| WWW亚洲色大成网络.COM| 国产成人免费网站在线观看| 亚洲αⅴ无码乱码在线观看性色| 日本免费无遮挡吸乳视频电影| 久久精品国产亚洲AV未满十八 | 亚洲国产美女视频| 国产卡一卡二卡三免费入口| 亚洲一区二区三区高清不卡| 永久免费无码网站在线观看| 免费人成视频在线播放| 亚洲另类激情综合偷自拍图| 久久青草91免费观看| 亚洲精品第一国产综合精品| 毛片a级毛片免费观看品善网| 国产精品亚洲精品久久精品 | 亚洲中文字幕无码av| 日本高清免费不卡在线| 日韩在线视频播放免费视频完整版| 曰韩亚洲av人人夜夜澡人人爽| 性xxxxx大片免费视频| 亚洲免费福利在线视频| 亚洲av无码成人精品区在线播放| 成在人线av无码免费高潮水| 久久亚洲AV成人无码| 国产在线观看免费完整版中文版| 91免费在线视频| 亚洲sss综合天堂久久久| 亚洲精品456播放| 免费人成在线观看69式小视频| 欧美亚洲国产SUV| 亚洲AV中文无码乱人伦下载| 天天摸夜夜摸成人免费视频| 香蕉免费在线视频| 亚洲色大成网站www永久男同| 色噜噜AV亚洲色一区二区|