欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
使用Axon框架開(kāi)發(fā)CQRS應用
Tutorial – Getting started with CQRS and Axon Framework « JTeam Blog / JTeam: Enterprise Java, Open

Axon是一個(gè)基于DDD領(lǐng)域驅動(dòng)設計的搭建CQRS架構的框架,特點(diǎn)是可以和Spring整合。

Axon可以幫助簡(jiǎn)化建立基于EDA架構的CQRS應用,它對Domain Events的支持比較豐富,特別增強了Jdonframework沒(méi)有的領(lǐng)域事件中的事務(wù)支持(不過(guò)個(gè)人覺(jué)得處理起來(lái)要復雜,因為事務(wù)本身就很棘手)。

Axon最大特點(diǎn)就是嚴格按照CQRS定義來(lái)編程,比如Command EventStore等等,好處是熟悉CQRS的人比較易懂,個(gè)人認為缺點(diǎn)是和DDD的統一語(yǔ)言要求有些距離了,如果只懂DDD,不懂CQRS的術(shù)語(yǔ),還是不能方便使用Axon,這方面好像有些邏輯上疙瘩。個(gè)人觀(guān)點(diǎn)。

開(kāi)發(fā)步驟:
1.結合Maven建立項目Project,配置好需要的包。
2.建立Command類(lèi),如下:

public class CreateOrderCommand {

private final String orderId;
private final String productId;

public CreateOrderCommand(String orderId, String productId) {
this.orderId = orderId;
this.productId = productId;
}

public String getOrderId() {
return orderId;
}

public String getProductId() {
return productId;
}
}


建立Domain Events類(lèi),如下:

import org.axonframework.domain.DomainEvent;

public abstract class AbstractOrderEvent extends DomainEvent {
public String getOrderId() {
return getAggregateIdentifier().asString();
}
}

public class OrderCreatedEvent extends AbstractOrderEvent {

private final String productId;

public OrderCreatedEvent(String productId) {
this.productId = productId;
}

public String getProductId() {
return productId;
}
}

如果用Annotation注解來(lái)標明DomainEvent,也許更好(應該有),使用繼承有些侵入性。

這些步驟之前,應該假設Order等領(lǐng)域模型已經(jīng)建立好,上面這些類(lèi)都應該屬于行為操作性質(zhì),以前我們是寫(xiě)在Service中的。

3.建立CommandHandler,前面有事件發(fā)生,這里就有事件處理了,這里實(shí)際遵循事件模式中兩個(gè)主題:觸發(fā)者;接收者,CommandHandler屬于接收者。關(guān)于CommandHandler討論可見(jiàn)OOJDON的觀(guān)點(diǎn)。
接受Order訂單的創(chuàng )建命令的處理者Handler代碼如下,需要使用@CommandHandler標注:

@CommandHandler
public void createOrder(CreateOrderCommand command) {
orderRepository.add(new Order(command.getOrderId(), command.getProductId()));
}

@CommandHandler
public void confirmOrder(ConfirmOrderCommand command) {
Order order = orderRepository.load(new StringAggregateIdentifier(command.getOrderId()));
order.confirm();
}


在confirmOrder中,我們注意它委托了order.confirm(),讓領(lǐng)域模型Order的方法confirm()確認自己的創(chuàng )建。

從這里看出,CommandHandler類(lèi)似我們MVC中Controller,也就是控制器,專(zhuān)門(mén)接受來(lái)自界面的命令事件,類(lèi)似Struts等中Action;JSF等中的界面Bean,或者類(lèi)似Swing等中Listerner,或者類(lèi)似SOA中的服務(wù)。當然在Jdonframework中,結合Struts 1.x的Handler可以節省不用寫(xiě)。

DCI架構中,Handler這里實(shí)際就是場(chǎng)景發(fā)生地,在簡(jiǎn)潔優(yōu)雅上,DCI架構要比CQRS更簡(jiǎn)單,更傾向于業(yè)務(wù)統一語(yǔ)言,否則,只懂業(yè)務(wù)的領(lǐng)域專(zhuān)家還要學(xué)習設計模式中事件命令模式,將業(yè)務(wù)再翻譯成事件語(yǔ)言,多一層翻譯,就多一層信息失真,以前是將業(yè)務(wù)翻譯成數據庫語(yǔ)言,現在推翻了,就不能再多翻譯這一層了。

前面談到CommandHanlder再次觸發(fā)Domain Model領(lǐng)域模型 Order中的方法,內容如下:

public void confirm() {
// we can only confirm an open order.
if (status == Status.OPEN) {
apply(new OrderConfirmedEvent());
}
}

@EventHandler
//Handler調用這里方法
private void onConfirm(OrderConfirmedEvent event) {
status = Status.CONFIRMED;
}


最后一步,編寫(xiě)查詢(xún)Query組件:

@Component //Spring的標注
public class OrderEventHandler {

@EventHandler
public void handleOrderCreated(OrderCreatedEvent event) {
System.out.println(String.format(
"An order is created: [%s] for product: [%s]",
event.getOrderId(),
event.getProductId()));
}

@EventHandler
public void handleOrderCancelled(OrderCancelledEvent event) {
System.out.println(String.format(
"An order is cancelled: [%s]", event.getOrderId()));
}

@EventHandler
public void handleOrderConfirmed(OrderConfirmedEvent event) {
System.out.println(String.format(
"An order is confirmed: [%s]", event.getOrderId()));
}
}

看得出來(lái),Axon可能沒(méi)有對查詢(xún)進(jìn)行更多支持,JdonFramework提供查詢(xún)緩存優(yōu)化,自動(dòng)分頁(yè)查詢(xún)等功能,將查詢(xún)和命令之間數據共享通過(guò)緩存聯(lián)系封裝起來(lái),更簡(jiǎn)化CQRS的查詢(xún)和命令分離后的再結合。

從Axon和Jdonframework 6.0版本等CQRS框架看得出來(lái),事件是一個(gè)解決領(lǐng)域驅動(dòng)技術(shù)架構的好方法,但是如果事件比較多,都在空中飛來(lái)飛去,增加編程復雜性和代碼可閱讀性,這時(shí),DCI架構,將模型帶上角色帽子,拉到當前場(chǎng)景,讓其演出,表演交互行為,就更加符合業(yè)務(wù),符合DDD統一語(yǔ)言這個(gè)概念。







案例源碼:
http://axonframework.googlecode.com/files/axon_tutorial.zip

[該貼被banq于2011-01-05 10:02修改過(guò)]
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
NHibernate學(xué)習
Hibernate5.2之原生SQL查詢(xún)
WCF之旅(4):WCF中的序列化(Serialization)-
LINQ&EF任我行(一)
webwork參數傳遞心得
用jsp實(shí)現一個(gè)簡(jiǎn)單的購物車(chē)web應用系統。
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久