ビーンズバインディングを広く使用するJavaプロジェクトでGlazedListsの使用を開始しました(MVVMパターン)。
PluggableList を使用すると、ソース リストをテーブルにバインドし、実行時にソース リストを変更できます。これを実現するには、すべてのソース リストが同じ ListEventPublisher と ReadWriteLock を共有する必要があります。これは、PlugableList がそのソースとロックとプラブリッシャーを共有する必要があるためです。以下の疑似コードに示すように、静的パブリッシャーを作成し、潜在的なソース リストを所有するクラスをロックし、それらの静的値を使用して、クラスのすべてのインスタンス化と PluggableList でリストを作成することによってこれを実現します。
public class ModelClass
{
final static EventList LIST = new BasicEventList();
final static ListEventPublisher LISTEVENTPUBLISHER = LIST.getPublisher();
final static ReadWriteLock READWRITELOCK = LIST.getReadWriteLock();
final EventList sourceList =
new BasicEventList(LISTEVENTPUBLISHER, READWRITELOCK);
}
public class UiControllerClass
{
final PluggableList pluggableList =
new PluggableList(ModelClass.LISTEVENTPUBLISHER, ModelClass.READWRITELOCK);
// ... call pluggableList.setSource(someSourceList)
}
これには2つの懸念があります。
(1) UiController のコンポーネントの特定の要件のため、モデルで決定を下す必要があります。これは MVVM パターンに違反しているようです。
(2) リストが非常に多く、頻繁にアクセスされる場合、リストはすべて同じロックを共有するため、共有ロックはリストのパフォーマンスに影響を与える可能性があります。それ以外の場合、これらのリストのそれぞれは、互いに気にせずに独立して動作できる必要があります。
私はこれについて間違っていますか?ModelClass が特別な UiControllerClass 要件について知る必要がなく、潜在的なパフォーマンス ヒットなしで PluggableLists を機能させるより良い方法はありますか?