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

Is there a way to generate CRUD actions dynamically for my domain objects?

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

我惊讶地注意到的一件事是,对域对象的任何操作都需要使用 static inner 类.

预先确定

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

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

嗯,没有。那些嵌套的静态 类 用于生成类型安全的域事件,然后其他对象可以通过内部事件总线订阅这些域事件。抱歉,如果不清楚。

写一个action,写一个public方法即可,eg:

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) { ... }

这些可用于否决操作(例如域层的参照完整性)或执行触发器(例如级联更新或非规范化数据)。但那些是高级用例;一般来说,这类东西会在以后添加。

希望对您有所帮助。对于其他问题,我建议您订阅用户邮件列表,我们往往会比这里更快地回答问题。

感谢