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

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

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

    領域服務與業務服務職責的討論

    在領域設計中,劃分為三種模型,分別為:實體(Entity)、值對象(Value Object)、和服務(Service)。其中Service與我們傳統設計中的Service有什么不同呢?

    讓 我們來回憶一下,通常我們針對將讀寫xml、資金轉賬等代碼放在service中,可以看出,該層包括了兩種含義,一種是與業務無關的,一種是與業務緊密 關聯的。領域驅動設計將這兩層含義進一步劃分,《Domain-Driven Design》中的例子那樣:如果銀行應用可以將我們的交易轉化并輸出電子表格文件,那么這種輸出就應該是應用服務。而負責處理資金轉帳的借貸關系,應該 屬于領域層,它包括了基本的業務邏輯,而技術層上的服務則根本沒有任何業務含義。由此得知,將傳統設計中的Service繼續劃分,得到應用服務與領域服 務。領域層和應用層的服務是相互合作,由應用Service指揮領域對象來解決問題。

    如此劃分,可以使各層的結構和職責更加清晰,技術與業務進一步分離。

    以上是我個人的理解,有不對之處還請指正。

    另仔細閱讀實戰DDD(Domain-Driven Design領域驅動設計), 在該文中說到:“在JiveJdon3中,com.jdon.jivejdon.service.ForumService和Forum實體模型及其值對 象ForumState共同完成領域模型,其中ForumService屬于應用服務層;而后兩者屬于領域層;其他服務 ForumMessageService、AccountService和UploadService等都是此類性質。”在JiveJdon3中并沒有對 領域與應用Service進行明確的劃分,而是由ForumService來完成。JJ3的代碼我沒有看過,只是從這段文字還這樣判斷的,有不對之處還請 包含。請問,JJ3中是否對Service進行了劃分?如果沒有那么您是怎樣考慮的呢?

    bangq: 非常有道理,Evans DDD中的Service和我們傳統的Service確實不一樣,它主要劃分為應用層服務和領域層服務以及基礎結構層服務。

    在我的JJ3案例中,我沒有進行這種嚴格的分層分類,是以Web服務中的Service和操作Operations概念來區分的:

    需要對外開放的、供客戶端調用的我命名為服務,當然這個服務里也可能會區分為應用服務和領域服務;不對外開放,供業務層內部使用的普通operations就作為普通組件來看待。

    個人目前感覺:應用服務和領域服務區分需要非常敏感,而且目前沒有看到大大的好處。

    有時,快速性 方便性確實必須注意,當然這個尺度是根據當事人的水平而定的。

    無論如何,我們更應該來關注領域對象:也就是實體和值對象,當然,領域對象并不是無行為的對象,可以封裝一些業務規則,不是簡單的setter或getter行為。

    不知你是如何想?

    版主: 應用服務與領域服務的區分確實非常敏感且難以撐控,在較為復雜的應用中,應用服務與領域服務并不一定能夠完全實現分離。這就需要不斷地重構來完善,但并不一定能夠完美(個人觀點)。

    我認同領域對象不應只是簡單的setter或getter,可以封裝一些業務規則。但前題是這些規則一定是它本身的職責才是,否則模型就會遭到破壞(面向對象的精要處)。

    版主: 引用兩段文字來說明問題:
    “OO編程的技術是一門代理的藝術。職責劃分明確,把接口定義好,把實現交給另外的類來做。首先把變化的部分和不變的部分 劃分出來。不變的部分,就成了框架。變化的部分,就是程序員自己做。 ”

    領 域對象是可以有行為能力的,在Rod Johnson的《without EJB》第10章《持久化》中有一段文字:“領域對象包含的邏輯,這里稱之為“domain logic”,這些domain logic應該最小化的依賴于DAO,而我們討論的那些需要持久化操作參與的事務性邏輯,這里稱之為“workflow methods”,這些“workflow methods”應該放在“business facade”,而不應該放在domain object里面。可重用度很高的操作可能是domain logic,應該放在domain object里面;比較難重用的控制邏輯方法,特別是可跨越多個domain object的操作則放在business facade object里面。”

    雖然領域對象是可以有行為能力的,但除領域對象之外一定是要業務對象的。業務對象應該操控多個領域對象的協作。并不是將所有的邏輯都塞到領域對象中。

    bangq: >但前題是這些規則一定是它本身的職責才是,否則模型就會遭到破壞(面向對象的精要處)。
    所以,例如各種條件的查詢,這些條件的篩選功能也應該屬于規則,過去我們將數據篩選留給數據庫SQL語句完成,現在DDD認為篩選應該在內存中完成,SQL文本也是一種規則。

    >除領域對象之外一定是要業務對象的
    引用Rod 的話容易引起誤解,前面我們討論過,我們的模型分領域對象和服務,領域對象又分實體和值對象。那么Rod這個業務對象又是什么呢?如果是服務,我們一般不會將服務稱為對象,服務是一種組件模型,要么是服務,要么是操作operations

    >Service層和Function層的關系應該是胃和小腸的關系一樣
    這是很形象比喻,現在確實沒有這方面框架,Service層和Function層分離,從現在來看,好像更多還是分析領域的事情,必須由建模人員來指定哪些服務是應用還是領域。

    posted on 2007-06-13 13:28 chenguo 閱讀(445) 評論(0)  編輯  收藏 所屬分類: J2ee Dev

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    留言簿

    隨筆分類(1)

    文章分類(52)

    好友 小山的博客

    最新隨筆

    最新評論

    主站蜘蛛池模板: 24小时日本电影免费看| 午夜在线免费视频 | 免费做爰猛烈吃奶摸视频在线观看 | 麻豆91免费视频| 四虎免费久久影院| 色屁屁www影院免费观看视频 | 美女视频黄免费亚洲| 国产精品亚洲片在线va| 啦啦啦完整版免费视频在线观看 | 亚洲精品国产品国语在线| 国产成人1024精品免费| 精品国产日韩亚洲一区| 中文字幕视频免费在线观看| 亚洲精品无码永久在线观看你懂的| 中文字幕乱码一区二区免费| 亚洲成人在线网站| 免费能直接在线观看黄的视频| 国产精品久久亚洲不卡动漫| 免费大黄网站在线观看| 男女作爱在线播放免费网站| 亚洲短视频在线观看| 午夜一区二区免费视频| 麻豆安全免费网址入口| 久久亚洲AV无码精品色午夜麻| 一区二区三区福利视频免费观看| 亚洲一级毛片在线观| 一本色道久久88亚洲综合| 免费看无码特级毛片| 亚洲激情视频图片| 亚洲成AⅤ人影院在线观看| 日本一卡精品视频免费| 亚洲爆乳大丰满无码专区| 丁香五月亚洲综合深深爱| 国产精品1024永久免费视频| 亚洲国产成人精品无码区花野真一 | 亚洲春色另类小说| 国产公开免费人成视频| 日韩插啊免费视频在线观看| 国产亚洲精品美女2020久久| 亚洲一区二区影院| 国产伦精品一区二区三区免费迷 |