1

我有ListActivity大约 100 个事件。(这些事件也显示在另一个活动的地图上。)

所以我有 my MyListActivity,它处理列表和 aMyListAdapter来填充处理MyEvent-Objects 的列表。作为模型,我有一个MyEvent-model-Class 和一个MyEventStorage-Class。

现在已经编写了一个方法来根据其 ID 返回事件的图像。它会决定要加载哪个图像,从哪里获取图像,加载它并重新采样。

我应该在哪里将此方法放在最佳实践中?

  • 我不想在需要它的每个活动中复制它,而只是在一个地方。

  • 我想把它放在我的MyEvent-Class 中,所以我可以调用myEvent.getImage();,但是把这个方法放在带有所有 getter 和 setter 的模型类中感觉有点不对。这是错的吗?

  • 我应该编写一个包含此方法的辅助类吗?作为静态方法?这仍然会提供良好的性能吗?

  • MyImageGetter或者也许为每个 MyEvent 对象创建一个额外的对象?

  • 或者使用图像变量和 getter/setter 扩展MyEvent-model 并创建一个额外的类,将正确的图像放入模型中?我该如何称呼该方法?

  • 另一个解决方案?

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 回答