2016-02-05 1 views
3

Следуя руководству Apache Isis, я создал приложение myApp, которое я использую для изучения.Есть ли способ генерировать CRUD-действия динамически для моих объектов домена?

Одна вещь, которую я заметил как неожиданность, заключается в том, что любое действие над объектом домена должно быть предопределено статическими внутренними классами.

Я нашел это очень многословие для простых операций CRUD, и я просмотрел весь сайт сайта документации Apache isis и не нашел способа генерации динамических действий для операций CRUD.

Есть ли способ сделать это? Нужно ли мне писать внутренние классы для каждого действия, которое я хочу для своего объекта домена?

ответ

4

Um, no. Эти вложенные статические классы предназначены для того, чтобы вы генерировали безопасные для домена события домена, которые затем могут быть подписаны другими объектами через внутреннюю шину событий. Извините, если это не ясно.

Чтобы написать действие, просто написать публичный метод, например:

Если все вы хотите CRUD, то нет необходимости писать какие-либо действия; объекты имеют режим редактирования, и пользователь может просто изменить любое поле.

Для более сложных приложений мы обычно предлагаем отключить использование @DomainObject (редактирование = Редактирование.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.

Thx