我正在编写一个应用程序,它连接到服务器并获取图像列表,然后下载它们并将它们显示在网格中。
这个过程的第一部分是由我的一个客户机类完成的,它连接到服务器并请求图像URL的列表。我在我的视图控制器中这样做,并将其传递给我的视图。
第二部分是由我编写的一个图像缓存类完成的,它获取每个图像URL,并检查应用程序是否已经下载并存储了它。如果是,它将从文件系统获取图像并返回它。否则,它将异步下载图像并将其存储。
我现在的做法是,我的视图控制器获取图像标识符列表,并将它们传递到我的视图中。然后,视图为每个图像创建图像视图,并用占位符图像填充它们,然后向图像缓存请求每个图像,并在下载图像时填充图像。
对于我的视图的绘图函数本身来说,具有这种下载图像的逻辑是不是很糟糕的设计?这感觉有点违反了MVC,因为我的视图正在做工作来获取它应该显示的数据。但是,实际的联网是在其他地方(在图像缓存类中)完成的,并且被抽象出来,以便视图只是调用[ImageCache getImageForIdentifier:... completionHandler:...]。
发布于 2012-07-19 09:13:43
视图类不应该进行任何网络调用。视图只需与控制器通信,即可获得需要显示的数据。所以,
我的目标是创建三个不同的类,
控制器类=模型class
ImageCache类存储已经下载的图片,可能在CoreData中。每次从ImageCache以及以后需要更多的新图像时,都会从ImageDataController填充ImageCollection类。
发布于 2012-07-19 09:12:32
您的ImageCache类就是模型级别类的一个示例。它对任何UI都一无所知。好的MVC会说view类,就像你的网格视图一样,永远不应该直接和Model类对话。这就是控制器的作用。
一种更简洁的实现是让控制器使用ImageCache进行下载,并在下载过程中更新网格视图。这样就把一些业务逻辑移出了网格视图类,让它只关心表示。
https://stackoverflow.com/questions/11552557
复制相似问题