欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

再論 Java 應(yīng)用中的“領(lǐng)域建?!?/h1>
系統(tǒng) 1966 0

再論 Java 應(yīng)用中的“領(lǐng)域建模”

轉(zhuǎn)載請(qǐng)保留作者信息:

作者:88250

Blog: http:/blog.csdn.net/DL88250

MSN & Gmail & QQ:DL88250@gmail.com



最近又重新整理了一下項(xiàng)目中領(lǐng)域模型建模的思路。記得范凱( robbin ) 在 2005 年時(shí)候總結(jié)的四種風(fēng)格的“領(lǐng)域模型”及其一些變種相信大家的耳熟能詳了。以現(xiàn)在的觀點(diǎn)來(lái)看,不管其劃分是否合理,是否適合任何項(xiàng)目,討論都是有意義的。從 2004 年到 2008 年來(lái)領(lǐng)域模型的話題一直都是各個(gè)技術(shù)論壇、郵件列表必討論的話題之一,這里我只是想就‘領(lǐng)域模型建?!@個(gè)問(wèn)題發(fā)表一下我的觀點(diǎn),相信討論還會(huì)繼續(xù)下去,這才是本質(zhì)——演化。這里的觀點(diǎn)都是基于 Java 環(huán)境上的應(yīng)用展開(kāi)的,其他語(yǔ)言環(huán)境另當(dāng)別論。

相關(guān)術(shù)語(yǔ)與概念

首先,讓我們澄清一些相關(guān)術(shù)語(yǔ)與概念。很多時(shí)候發(fā)現(xiàn)大家討論問(wèn)題前都沒(méi)有一個(gè)共同的基本假設(shè)作為前提,導(dǎo)致了問(wèn)題越討論越混亂,引入的其他問(wèn)題越來(lái)越多。這里,我先對(duì)本文涉及的幾個(gè)非常基本的概念做個(gè)統(tǒng)一的假設(shè)。

POJO( Plain Old Java Object

POJO 是一個(gè)簡(jiǎn)單的、常規(guī)的 Java 對(duì)象,它包含業(yè)務(wù)邏輯處理或持久化邏輯等,但不是 JavaBean、EntityBean 等,不具有任何特殊角色并且不繼承/不實(shí)現(xiàn)任何其它 Java 框架的類或接口(java.io.Serializable 除外)。例如下面這個(gè)類就是一個(gè) POJO,注意業(yè)務(wù)邏輯方法:


/**
* A POJO user description.
* @author 88250
* @version 1.0.0.0, Jan 15, 2009
*/
public class User implements Serializable {

/**
* user name.
*/
private String name;

/**
* Default constructor.
*/
public User() {
}

/**
* User login business logic.
*/
public void login() {
// ....
}

/**
* Gets the name of this user.
* @return the value of name
*/
public String getName() {
return name;
}

/**
* Sets the name of this user.
* @param name new value of name
*/
public void setName(String name) {
this.name = name;
}
}


從 OO 的角度看,這是一個(gè)純粹的 Java 類,它擁有狀態(tài)與行為,這也就構(gòu)成了這個(gè) User 類的職責(zé)??上КF(xiàn)在 POJO 這個(gè)詞簡(jiǎn)直是濫用啊,大家都認(rèn)為只要描述的是一個(gè)領(lǐng)域 實(shí)體,一個(gè)純數(shù)據(jù)類就是 POJO 了 。

領(lǐng)域模型( Domain Model

根據(jù) Martin 大叔的解釋,領(lǐng)域模型就是統(tǒng)一了 行為 數(shù)據(jù) 對(duì)象模型 。從 OO 的角度上看是沒(méi)有任何難點(diǎn)與疑問(wèn)的,但是開(kāi)始對(duì)具體項(xiàng)目著手進(jìn)行 OO 設(shè)計(jì)的時(shí)候問(wèn)題就很多了,后面將闡述一些在實(shí)施領(lǐng)域模型建模時(shí)“公認(rèn)”的問(wèn)題。再來(lái)看看 Wikipedia 上關(guān)于 領(lǐng)域模型的解釋 ,其中涉及到了“領(lǐng)域?qū)樱? Domain Layer ) ”這個(gè)概念,并且說(shuō)明了 DDD 中的領(lǐng)域模型是領(lǐng)域?qū)拥囊粋€(gè)部分 。如下圖:

根據(jù) Wikipedia 上的解釋,領(lǐng)域?qū)优c 業(yè)務(wù)層 是同一個(gè)概念,這樣劃分的確是純粹的 DDD。不過(guò),這與 JavaEE 規(guī)范中的分層理念有一點(diǎn)沖突,與 EJB 3 編程模型有著明顯的沖突。

各種風(fēng)格(Style)的領(lǐng)域模型

這里的“風(fēng)格”是按照 Martin 的觀點(diǎn)進(jìn)行闡述的。在 以往的討論 中,有四種可行的模型:

  • 失血模型
  • 貧血模型
  • 充血模型
  • 脹血模型


這四種模型基本是 robbin 、 JavaEye 社區(qū)思考、討論的結(jié)果。但我認(rèn)為還是按照 Martin 的提出的模型進(jìn)行討論比較簡(jiǎn)潔,有兩種可行的模型:

  • 貧血的領(lǐng)域模型(Anemic Domain Model)
  • 富領(lǐng)域模型(Rich Domain Model)

貧血的領(lǐng)域模型( Anemic Domain Model

貧血的領(lǐng)域模型就是在領(lǐng)域?qū)ο笾? 包含了 accessors 方法,默認(rèn)的構(gòu)造器,不包含任何邏輯處理。而邏輯處理放置于 xxxManager 中,使用事務(wù)腳本( Transaction Script , PoEAA )進(jìn)行操作。

富領(lǐng)域模型( Rich Domain Model

富領(lǐng)域模型就是 DDD 中所描述的模型,完全的 OO Concerns

“公認(rèn)”的問(wèn)題

EJB 3 & JPA

眾所周知,EJB 3 + JPA 的編程模型是典型的貧血模型,也是 JavaEE 所推廣的 最佳實(shí)踐 ,唯一正統(tǒng)的編程模型。 在這個(gè)模型中,EJBs 扮演了業(yè)務(wù)邏輯處理的角色,在分層設(shè)計(jì)中處于服務(wù)層 / 業(yè)務(wù)層。而 JPA entities 則扮演了典型的 純稚數(shù)據(jù)類 ,其行為完全由 EJBs 負(fù)責(zé)。這些也許與早先的 SSH 這樣一個(gè) 無(wú)狀態(tài) 框架組合那么深入人心密切相關(guān)吧。目前來(lái)說(shuō),Seam 框架 / WebBeans 規(guī)范是解決客戶端與服務(wù)端狀態(tài)問(wèn)題的較好實(shí)現(xiàn)與規(guī)范。另外,Seam 中的 Entity 也是可以作為 Component 而 inject / outject 的,所以 Seam 有在嘗試 提供一個(gè) DDD 的框架給開(kāi)發(fā)者。

Domain Logic vs Business Logic

如果你是一個(gè) DDD 的純粹擁護(hù)者,不存在區(qū)分領(lǐng)域邏輯與業(yè)務(wù)邏輯,統(tǒng)稱為領(lǐng)域邏輯。下面這個(gè)劃分領(lǐng)域邏輯與服務(wù)邏輯是針對(duì)類 EJB 3 + JPA 純粹用戶者的。
Domain 業(yè)務(wù)邏輯(Domain Logic)與 Service 業(yè)務(wù)邏輯(Business Logic)劃分的原則:

  1. 根據(jù)是否依賴持久化邏輯劃分
    領(lǐng)域模型只包含不 依賴于持久化 的領(lǐng)域邏輯,而那些依賴持久化的領(lǐng)域邏輯應(yīng)該被分離到 Service 層
  2. 使用 Rod Johnson 的"case by case"原則
    可重用度高的,和 domain object 狀態(tài)密切關(guān)聯(lián) 的放在 domain 中,可重用度低的,和 domain object 狀態(tài)沒(méi)有密切關(guān)聯(lián)的放在 Service 中

這樣,貌似是解決了 Java 應(yīng)用中使用“正統(tǒng)”方式(JavaEE 規(guī)范)實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)開(kāi)發(fā)。但是,這樣不覺(jué)得過(guò)于復(fù)雜和畫蛇添足嗎?

結(jié)論

領(lǐng)域模型驅(qū)動(dòng)的設(shè)計(jì)(DDD)是需要開(kāi)發(fā)團(tuán)隊(duì)在特定行業(yè)中 積累 到一定的時(shí)候才能真正做到的,這涉及到了企業(yè)(客戶)的核心價(jià)值實(shí)現(xiàn)與業(yè)務(wù)實(shí)現(xiàn) 重用 ,如果不是本著這個(gè) 最終目的 ,Java 下的 DDD 慎用。在建模你的 Java 項(xiàng)目時(shí),一定要對(duì)項(xiàng)目的 Scope 做好分析,認(rèn)真做好技術(shù)選型。一般來(lái)說(shuō),貧血模型(Anemic Domain Model)是最容易設(shè)計(jì)和實(shí)現(xiàn)的,也足夠滿足一般 Java Web 項(xiàng)目了。而領(lǐng)域模型(Rich Domain Model)是用在復(fù)雜 JavaEE 項(xiàng)目上的(例如實(shí)施 SOA 時(shí)),切勿殺雞用牛刀 :-)

參考列表

下面的文章是精華中的精華,有興趣、時(shí)間的朋友一定不要錯(cuò)過(guò) :-)

-->

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 91免费国产精品 | 国产成人视屏 | 成人黄色免费在线观看 | 高清人人天天夜夜曰狠狠狠狠 | 成年人福利 | 人人爽视频| 波多野结衣一区2区3区 | 三级视频在线播放 | 夜夜操狠狠干 | 亚洲视频在线一区 | 国产精品国产a | 国产999精品久久久影片官网 | 亚洲一区在线观看视频 | 色综合中文字幕天天在线 | 一级片免费在线播放 | 91文字幕巨乱亚洲香蕉 | 欧美性高清bbbbbbxxxxx | 久久9999久久| 久久夜色精品国产亚洲 | 在线观看中文字幕 | 日韩影视在线 | 亚洲精品福利在线 | 天天干天天操天天透 | 国内精品一区二区三区最新 | 国产精品久久久久久亚洲伦理 | 91国内外精品自在线播放 | 国产在线精品一区二区三区 | 五月天综合在线 | 99热人人 | 国产亚洲久| 国产日韩第一页 | 久热免费| 欧美非洲黑人性xxxx | 日韩精品一区二区三区在线观看 | 欧美亚洲香蕉 | 久久久久亚洲精品 | 国产成人综合日韩精品婷婷九月 | 91热视频在线观看 | 嫩草在线播放 | 欧美性第一页 | 国产苐1页影院草草影院 |