有没有办法为我的域对象动态生成CRUD操作?

时间:2016-02-05 11:46:14

标签: isis

通过遵循Apache Isis教程,我生成了用于研究目的的“myApp”应用程序。

我注意到的一件事是,对于域对象的任何操作都需要使用静态内部类来预先确定。

我发现这对于简单的CRUD操作非常冗长,我查看了Apache isis文档站点部分,发现没有办法为CRUD操作生成动态操作。

有办法吗? 我是否真的需要为我想要的域对象的每个动作编写内部类?

1 个答案:

答案 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