У меня в приложении очень тесно связана 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 (может использоваться, чтобы показать пользователю, что было удалено и т. Д.), Однако они на самом деле не кажутся мне «правильными».
Есть ли лучшее решение или, может быть, даже обычная практика?
Заранее спасибо
феллинг