JdonMVC+JDON+CQRS演繹智慧物件
閱讀本貼之前請先閱讀如下幾個帖子
無狀態服務類UserService
CQRS中的命令上下文
這是CQRS中的查詢路徑,UserQueryService直達DB
智慧領域物件設計
領域物件應該有豐富的業務行為,它們不應該感知技術環境,技術環境應該為domain服務,domain物件還可能在不同場景裡面表現出不同的行為和具備相關場景屬性,所以jdon做的是在挑戰傳統ssh程式設計模式,ssh被banq喻為模型層的組合語言,下面以JdonMVC+Jdon來演示一下domain event或者說CQRS,或者說非貧血模型。
也許是非常不嚴謹的實踐,以後還會更新,大家可以瞭解其中的思想,整個程式碼可以到http://code.google.com/p/jdonmvc/downloads/list下載,war包直接放到tomcat裡就可以跑,程式執行介面如下:
[img index=1]
下面上程式碼解釋:
這是User類,沒有寫get set到這裡,get ,set儘量只在UI和DB層用,因為那是OO世界的過程化邊界,jivejdon用get來在UI層做全域性懶載入。
@Model public class User { private int userId; private String name; @Inject private DomainEvents domainEvents; //jdon對Model的enhance物件,隔離domain和技術的耦合 //記憶 public void remember() { domainEvents.saveDomainObject(this); } //狀態變化,domain物件In Memory管理 public void updateMemory(){ domainEvents.domainHasBeenEdit(this); } //失憶 public void forget(){ domainEvents.domainHasBeenDelete(this); } } <p class="indent"> |
無狀態服務類UserService
public interface UserService { User enhance(User user);//借用jdon的領域事件模式,enhance領域物件 } <p class="indent"> |
CQRS中的命令上下文
@Resource public class UserCommandContext { @Service("userService") private UserService userService; @Path("/users") @Post public String create(User user) { User usermodel = userService.enhance(user); usermodel.remember(); //記憶 return "redirect:/"; } @Path("/user/{<[0-9]+>user.userId}") @Delete public String delete(User user) { User usermodel = userService.enhance(user); usermodel.forget();//失憶 return "redirect:/"; } @Path("/user") @Put public String update(User user) { User usermodel = userService.enhance(user); usermodel.updateMemory();//狀態更新 return "redirect:/"; } } <p class="indent"> |
這是CQRS中的查詢路徑,UserQueryService直達DB
@Resource public class UserQueryResource { @Service("userQueryService") private UserQueryService userQueryService; @Path("/") public Represent index(Page<User> page) { Page<User> pagedata; if (page == null) pagedata = userQueryService.getUserList(new Page<User>()); else pagedata = userQueryService.getUserList(page); CssPageBar cssPageBar = userQueryService.getCssPageBar(pagedata); Map<String, Object> map = new HashMap<String, Object>(); map.put("page", pagedata); map.put("cssPageBar", cssPageBar); return new Html("/index.ctl", map); } @Path("/user/{<[0-9]+>userId}") public Represent user(Integer userId) { User user = userQueryService.getUser(userId); return new Html("/user.ctl", "user", user); } } <p class="indent"> |
[該貼被oojdon於2010-07-13 14:59修改過]
[該貼被oojdon於2010-07-13 15:04修改過]
[該貼被oojdon於2010-07-13 17:52修改過]
相關文章
- 智慧領域物件設計(演繹革命)-1/2物件
- redux 流程演繹Redux
- 理性演繹模型(轉載)模型
- 4G模組軟體的ADC示例 | 智慧演繹
- 以乾坤之道演繹精彩IT人生
- 超越三星,華為再與蘋果演繹智慧手錶江湖蘋果
- 快速故障定位 看聯想和Riverbed如何演繹?
- AWS 人工智慧黑客馬拉松正式開啟!用實力演繹科技向善!人工智慧黑客
- Matt AI——演繹虛擬人的“喜怒哀樂”AI
- 實錘,PBlaze5實力演繹multiple namespaces 功能(下)namespace
- 金字塔原理(5)- 演繹與歸納的區別
- 如何藉助網路優勢,演繹SD-WAN雲網融合?
- 三國殺、狼人殺、劇本殺——社交演繹遊戲發展史遊戲
- 中國石油大學攜手銳捷演繹“網際網路+教室“新生態
- 官宣!張碧晨演繹《新斗羅大陸》手遊主題曲《藍銀色的海》
- ERP摻入奶油和雞蛋,新技術演繹嶄新ERP(轉)
- 用遊戲演繹肥皂劇的《Mutazione》,群戲驅動故事的敘事張力遊戲
- 《Sea Salt》:充斥血腥暴力的畫素遊戲,演繹反英雄式的克蘇魯神話遊戲
- 在低程式碼開發平臺上全新演繹OA、CRM等管理系統
- 努比亞Z17S上手評測 來自真正全面屏的演繹
- 多媒體互動受青睞,演繹未來3G網路薦
- 從總體角度演繹真實戰爭,《率土之濱》重新定義SLG戰爭形態
- 93歲許仲義先生(江蘇無錫)的演繹:萬氏幻方轉換過程
- 榫卯傳統文化用遊戲方式演繹,《第五大發明》TapTap玩家10分期待遊戲APT
- 《奇異人生:本色》的技術力如今終於能支撐起出色的劇本演繹
- 《十字軍之王3》火熱背後,地圖上色遊戲能否演繹歷史程式地圖遊戲
- 蠻啾出品《藍色星原:旅謠》開啟預約 大量實機揭示奇幻新演繹
- SciTech-Logics-Formal Logic-Reasoning(推理)的兩大種類{ 歸納 和 演繹 }ORM
- 陸奇演講:人工智慧精要人工智慧
- 被B站“一眼相中”,《重明鳥》製作人郭振談中國風遊戲的現代化演繹遊戲
- 阿里雲視訊雲「 vPaaS 」演繹了怎樣的音視訊應用開發「未來圖景」?阿里
- 騰訊資深技術官23天手擼筆記,全新演繹“Kafka部署實戰”,已開源下載筆記Kafka
- 辦公自動化圖書:演繹生動•Excel圖表:寫給大家看的圖表書(全綵)Excel
- 以遊戲演繹1200多年前的古詩——《畫境長恨歌》敘事設計思路分享遊戲
- 以遊戲演繹東方美學,原創解謎遊戲《畫境長恨歌》登陸國內各大應用市場遊戲
- 【劉文彬】【精解】EOS智慧合約演練
- 智慧領域物件設計物件
- HTC智慧手機演變史–資料資訊圖