Domain-Driven Design領域驅動設計(續)
最初層次只分為三層:表現層、業務層和持久層;DDD其實告訴我們如何讓實現業務層!
狀態對象:數據庫的替代者
服務是一些行為功能,有人指出沒有行為的模型只有getter/setter,是不是貧血模型,或者叫失血模型,DDD專家Eric Evans認為:將領域需要的功能強加給實體和值對象,不僅會破壞模型中對象定義,而且會認為地添加毫無意義的對象,
失血模型的請教
按照DDD領域建模觀點看,中間業務層還應該再分為應用層和領域層(具體文章見http://domaindrivendesign.org)。Service屬于應用層,Domain則屬于領域層。它們的定義是:應用層:定義軟件可以完成的工作,并且指揮具有豐富含義的領域對象來解決問題,保持精練;不包括業務規則或知識,無業務情況的狀態; 領域層:負責表示業務概念、業務狀態的信息和業務規則,是業務軟件核心。
層次之間必須清晰分離,每個層都是內聚的,并且只依賴它的下層,為了實現各層的最大解耦,Ioc模式和Ioc容器是目前最好的選擇。
在DDD觀點看來,領域模型Domain其實分為三種元素:實體Enity、值對象( Object)和服務(Service)。
模型對象分實體和值對象,其實就是實體對象和對象狀態的區分,值對象表示對象狀態,在JiveJdon3中,有ForumState和ForumThreadState,其實它們就是值對象,對象狀態非常重要,它和對象生命周期scope有密切關系,最近出了一個Scopes開源免費框架就是專門提供對象生命周期管理的,所以,作為一個業務層框架必須有提供生命周期管理功能。
服務是一些行為功能,有人指出沒有行為的模型只有getter/setter,是不是貧血模型,或者叫失血模型,DDD專家Eric Evans認為:將領域需要的功能強加給實體和值對象,不僅會破壞模型中對象定義,而且會認為地添加毫無意義的對象,
失血模型的請教
posted on 2006-12-16 22:23 常言笑 閱讀(231) 評論(0) 編輯 收藏 所屬分類: 技術總結