0

ビーンズバインディングを広く使用する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 を機能させるより良い方法はありますか?

4

1 に答える 1