2016-02-05 37 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