我有一个约有100个事件的ListActivity
。 (这些事件也会在另一个活动的地图上显示。)
所以我的MyListActivity
处理列表,MyListAdapter
填充处理MyEvent
- 对象的列表。作为模型,我有MyEvent
- 模型类和MyEventStorage
- 类。
现在已经编写了一种方法,可以根据事件的ID返回事件的图像。它做了一些决定,哪些图像要加载,从哪里获取图像,加载它并重新采样。
哪里我应该将此方法用于最佳实践?
我不想在每个需要它的活动中复制它,只是在一个地方。
我想在我的MyEvent
- 类中使用它,所以我可以调用myEvent.getImage();
但是将这个方法放在模型类中并且所有的getter和setter方法。这是错的吗?
我应该编写一个包含此方法的辅助类吗?作为静态方法?这还能提供良好的表现吗?
或者为每个MyEvent对象创建一个额外的MyImageGetter
- 对象?
或者使用图像变量和getters / setter扩展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;
}
谢谢你提前!
答案 0 :(得分: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));
}
}