通过遵循Apache Isis教程,我生成了用于研究目的的“myApp”应用程序。有没有办法为我的域对象动态生成CRUD操作?
我注意到一件令人惊讶的事情是,对域对象的任何操作都需要用静态内部类来预先确定。
对于简单的CRUD操作,我发现这非常冗长,我查看了Apache isis文档站点部分,发现无法为CRUD操作生成动态操作。
有没有办法做到这一点? 我是否真的需要为我的域对象所需的每个动作编写内部类?
通过遵循Apache Isis教程,我生成了用于研究目的的“myApp”应用程序。有没有办法为我的域对象动态生成CRUD操作?
我注意到一件令人惊讶的事情是,对域对象的任何操作都需要用静态内部类来预先确定。
对于简单的CRUD操作,我发现这非常冗长,我查看了Apache isis文档站点部分,发现无法为CRUD操作生成动态操作。
有没有办法做到这一点? 我是否真的需要为我的域对象所需的每个动作编写内部类?
嗯,没有。如果要生成类型安全的域事件,那么这些嵌套的静态类可用于通过内部事件总线由其他对象订阅。对不起,如果不明确。
要写入动作,只写一个公共方法,如:
如果你想要的是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