通过遵循Apache Isis教程,我生成了用于研究目的的“myApp”应用程序。
我注意到的一件事是,对于域对象的任何操作都需要使用静态内部类来预先确定。
我发现这对于简单的CRUD操作非常冗长,我查看了Apache isis文档站点部分,发现没有办法为CRUD操作生成动态操作。
有办法吗? 我是否真的需要为我想要的域对象的每个动作编写内部类?
答案 0 :(得分:4)
要编写动作,只需编写一个公共方法,例如:
public Order placeOrder(Product p, int quantity) { ... }
如果你想要的只是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