3

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

令我惊讶的一件事是,对域对象的任何操作都需要使用静态内部类预先确定。

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

有没有办法做到这一点?我真的需要为我想要为我的域对象编写的每个操作编写内部类吗?

4

1 回答 1

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

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

希望有帮助。对于其他问题,我建议您订阅用户邮件列表,我们倾向于在那里比在 SO 上更快地回答问题。

谢谢

于 2016-02-05T14:20:27.833 回答