Ссылки на посторонние объекты / Комбинированные объекты - PullRequest
0 голосов
/ 10 июня 2018

Во-первых, JaVers выглядит как отличный продукт, так что спасибо всем, кто внес в него свой вклад.

Но прежде чем моя команда примет это, нам любопытно, какую поддержку или шаблоны она предлагает для группировки изменений в документах по нескольким коллекциям.

Представьте себе следующие модели предметной области:

class User {
    String username;
    List<String> roles;
}

class Role {
    String id;
    List<String> permissions;   
}

Чтобы получить журнал изменений как для конкретного пользователя, так и для связанных ролей, я могу представить себе следующую стратегию «ручной настройки»:

UserEntity targetUser = null; // Assume valid user
Changes userChanges = javers.findChanges(byInstanceId(targetUser.getId(), UserEntity.class).build());

List<Changes> roleChanges = targetUser.getRoles().stream()
        .map(role -> javers.findChanges(byInstanceId(role.getContextId(), RoleEntity.class)
                .from(targetUser.getCreateTime())
                .build()))
        .collect(toList());

// Manually merge these two sets of changes.

Это лучшее, что мы можем сделать илиСуществуют другие шаблоны / зацепки для группировки изменений между моделями, особенно те, которые имеют «идентификатор стороннего объекта» как часть их документа.

Спасибо.

1 Ответ

0 голосов
/ 12 июня 2018

Я предлагаю эту модель:

class User {
    String username;
    List<Role> roles;
}

class Role {
    String id;
    List<String> permissions;   
}

Затем вы можете использовать теневые запросы для чтения пользователей с ролями.Смотри https://javers.org/blog/2017/12/javers-vs-envers-comparision.html#reconstructing-full-object-graphs

...