2016-02-05 38 views
3

通過遵循Apache Isis教程,我生成了用於研究目的的「myApp」應用程序。有沒有辦法爲我的域對象動態生成CRUD操作?

我注意到一件令人驚訝的事情是,對域對象的任何操作都需要用靜態內部類來預先確定。

對於簡單的CRUD操作,我發現這非常冗長,我查看了Apache isis文檔站點部分,發現無法爲CRUD操作生成動態操作。

有沒有辦法做到這一點? 我是否真的需要爲我的域對象所需的每個動作編寫內部類?

回答

4

嗯,沒有。如果要生成類型安全的域事件,那麼這些嵌套的靜態類可用於通過內部事件總線由其他對象訂閱。對不起,如果不明確。

要寫入動作,只寫一個公共方法,如:

如果你想要的是CRUD,那麼就沒有必要寫任何行動;對象具有編輯模式,用戶可以更改任何字段。

對於更復雜的應用程序,我們通常建議使用@DomainObject(editing = Editing.DISABLED)禁用它 - 或者可以使用isis.properties配置文件中的設置全局禁用所有對象,然後將操作寫入更好地捕捉用戶對數據更改的意圖。

再回到這些嵌套靜態類,如果你要產生一個事件,那麼你可以對它進行註釋,如:

public static class PlaceOrderEvent extends ActionDomainEvent {} 
@Action(domainEvent=PlaceOrderEvent.class) 
public Order placeOrder(Product p, int quantity) { ... } 

這個然後讓其他代碼訂閱使用,如:

@Subscribe public void on(Customer.PlaceOrderEvent ev) { ... } 

這些可用於否決操作(例如域層的參照完整性)或執行觸發器(例如級聯更新或非規格化數據)。但那些是高級用例;一般來說這類東西會在稍後添加。

希望有所幫助。對於其他問題,我建議你訂閱用戶郵件列表,我們傾向於在那裏比在這裏更快地提出問題。

Thx