1

私はListActivity約100のイベントを持っています。(これらのイベントは、別のアクティビティのマップにも表示されます。)

そのため、リストを処理する と、オブジェクトMyListActivityを処理するリストをMyListAdapter作成する がありますMyEvent。モデルとして、MyEvent-model-Class とMyEventStorage-Class があります。

これで、ID に基づいてイベントの画像を返すメソッドが作成されました。どの画像を読み込むか、どこから画像を取得し、読み込み、再サンプリングするかを決定します。

この方法をベスト プラクティスのどこに配置する必要がありますか?

  • 必要なすべてのアクティビティでコピーするのではなく、1 か所だけにコピーします。

  • MyEvent-Class に入れたいので、呼び出すことができますmyEvent.getImage();が、このメソッドをすべての getter と setter を使用してモデル クラス内に配置するのは、どういうわけか間違っていると感じます。違いますか?

  • このメソッドを含むヘルパー クラスを作成する必要がありますか? 静的メソッドとして?これでも十分なパフォーマンスが得られるでしょうか?

  • それともMyImageGetter、すべての MyEvent オブジェクトに対して追加の -object を作成しますか?

  • またはMyEvent、イメージ変数とゲッター/セッターを使用してモデルを拡張し、モデルに適切なイメージを配置する追加のクラスを作成しますか? そのメソッドをどのように呼び出すのですか?

  • 別の解決策は?

MyEvent.java:

public class MyEvent {
    private int id;
    private int category;
    private String eventname;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    // other getters and setters
}

MyEventStorage.java:

private static MyEventStorage instance = null;

    private List<MyEvent> store;

    private MyEventStorage() {
        store = new ArrayList<MyEvent>();
    }

    // get the storage containing the events
    public static MyEventStorage getInstance() {
        if (instance == null) {
            instance = new MyEventStorage();
        }
        return instance;
    }

    public List<MyEvent> getStore() {
        return store;
    }

    public void setStore(List<MyEvent> store) {
        this.store = store;
    }

     // Add a Event to the store
    public void addEvent(MyEvent myEvent) {
        store.add(myEvent);
    }
    // Remove a Event from the store
    public void removeEvent(MyEvent myEvent) {
        store.remove(myEvent);
    }
}

統合したい方法:

Image getImageById(int id) {

    // decide which image to load based on the events id

    // decide where to load the image from

    // check if image available

    // load image if available else load placeholder image

    // resample image

    return image;
}

よろしくお願いします!

4

1 に答える 1

0

あなたの最後の箇条書きは的を射ていると思います。

Imageが実際に のプロパティである場合MyEvent、そのクラスにインスタンス変数を追加することは理にかなっています。モデル内のデータソースからイベントの画像を取得するためのロジックを含めるのではなく、静的ユーティリティ メソッドを使用してこのプロパティをロードする必要があります。

あなたのgetImageByIdメソッドは、保存されている場所から画像を取得するためにかなりの量の作業を行う必要があるようです。ユーティリティクラスを作成するのが最も理にかなっていると思います(ImageRetriever)画像の実際の取得を実行するために言及したような行に沿って。これにより、メソッドを複数の場所にコピーする必要がなくなります。パフォーマンスはこのクラスをインスタンス化する必要は決してないので、どちらかについて心配する必要はありません。

コードは次のようになります。

public class MyEvent {
   private int id;
   private int category;
   private String eventname;
   private Image image;

   public MyEvent(int id...) {
      // initialize instance vars
      setImageFromRetriever();
   }

   public void setImage(Image image) {
      this.image = image;
   }

   public void setImageFromRetriever() {
     // optional null check if you don't want to reload images
     setImage(ImageRetriever.getImageById(this.id));
   }
}
于 2013-10-30T19:15:48.393 に答える