Как обрабатывать удаление связанных объектов в DataModel - PullRequest
0 голосов
/ 04 июня 2019

У меня в приложении очень тесно связана DataModel. Например, одна вещь, которую я имею, это Foo класс

public class Foo {
    StringProperty nameProperty;
    // ...

    public void delete() {
        // ...
    }
}

Теперь у меня есть класс с именем FooReference, который используется для представления ссылки на класс Foo, который пользователь может установить в приложении. Причина появления этого класса станет очевидной через мгновение.

Я использую JavaFX и, следовательно, моя модель данных использует свойства, которые обновляются сами. Foo содержит nameProperty, который используется для отображения Foo в приложении. Всякий раз, когда это nameProperty изменяется, я хочу, чтобы приложение было уведомлено. Это не сработает, если я просто передам Foo, поскольку сам Foo не может произвести ChangeEvents.

Теперь возникает проблема: как я могу уведомить FooReference, когда Foo удален, чтобы он очистил свое значение?

Наивный подход, который у меня был, состоял в том, чтобы иметь List<Runnables deletionHandlers, который вызывается, когда Foo.delete() вызывается. Это, однако, кажется плохим. Я также не хочу использовать EventSystem, если этого можно избежать.

Последняя идея, которую я имел, состояла в том, чтобы использовать BooleanProperty deletedProperty, который переключается при вызове Foo.delete, который все остальные могут слушать.

Мне не очень нравятся эти идеи. Слушатели провоцируют использование многих лямбд, которые могут истощать память и производительность, а также некоторую дополнительную сложность в многопоточных средах. EventSystem, как я сказал, я бы хотел избежать, в основном по личным причинам. Свойства кажутся очень совместимыми с остальной частью макета программы и прекрасно интегрируются с JavaFX (может использоваться, чтобы показать пользователю, что было удалено и т. Д.), Однако они на самом деле не кажутся мне «правильными». Есть ли лучшее решение или, может быть, даже обычная практика?

Заранее спасибо

феллинг

...