0

我正在编写一个连接到服务器并获取图像列表的应用程序,然后下载它们并将它们显示在网格中。

此过程的第一部分由我拥有的客户端类完成,该类连接到服务器并要求提供图像 URL 列表。我在我的视图控制器中执行此操作并将其传递给我的视图。

第二部分由我编写的图像缓存类完成,它获取每个图像 URL 并检查应用程序是否已下载并存储它。如果是这样,它会从文件系统中获取图像并返回它。否则,它会异步下载图像并存储它。

我现在做事的方式是,我的视图控制器获取图像标识符列表并将它们传递到我的视图中。然后视图为每个图像创建图像视图并用占位符图像填充它们,然后为每个图像询问图像缓存并在下载图像时填充图像。

我的视图的绘制功能本身具有这种下载图像的逻辑是否是糟糕的设计?感觉有点像违反 MVC,因为我的视图正在努力获取它应该显示的数据。但是,实际的网络是在其他地方(在图像缓存类中)完成的,并且被抽象出来,因此视图只是调用[ImageCache getImageForIdentifier:... completionHandler:...].

4

2 回答 2

1

您的ImageCache课程是模型级别课程的示例。它不了解任何 UI。好的 MVC 会说 View 类,如您的网格视图,永远不应该直接与 Model 类对话。这就是控制器的用途。

更简洁的实现是让控制器使用 ImageCache 进行下载并随时更新网格视图。这将一些业务逻辑从网格视图类中移出,让它只关心表示。

于 2012-07-19T01:12:32.440 回答
1

好吧,视图类不应该进行任何网络调用。视图可以只与控制器通信以获取需要显示的数据。所以,

  1. 您的控制器工作是获取 URL 或图像。
  2. 有一个模型类,它收集了需要稍后显示的所有图像。将此模型类引用添加到您的控制器中。
  3. 控制器应该检查缓存并填充您的模型类。如果缓存没有图像,那么您的控制器应该为您的模型下载这些图像。
  4. 从控制器公开一个公共方法以从模型对象填充您的视图。

我的目标是创建三个不同的类,

  1. ImageCahce = 模型类
  2. ImageCollection = 模型类
  3. ImageDataController = 控制器类。

ImageCache 类存储已经下载的图片,可能在 CoreData 中。ImageCollection 类每次都会从 ImageCache 中填充,之后需要更多的新图像,然后从 ImageDataController 中填充。

于 2012-07-19T01:13:42.813 回答