首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是不是一个糟糕的设计/违反了模型-视图-控制器?

问这是不是一个糟糕的设计/违反了模型-视图-控制器?
EN

Stack Overflow用户
提问于 2012-07-19 08:58:27
回答 2查看 488关注 0票数 0

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

这个过程的第一部分是由我的一个客户机类完成的,它连接到服务器并请求图像URL的列表。我在我的视图控制器中这样做,并将其传递给我的视图。

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

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

对于我的视图的绘图函数本身来说,具有这种下载图像的逻辑是不是很糟糕的设计?这感觉有点违反了MVC,因为我的视图正在做工作来获取它应该显示的数据。但是,实际的联网是在其他地方(在图像缓存类中)完成的,并且被抽象出来,以便视图只是调用[ImageCache getImageForIdentifier:... completionHandler:...]。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-19 09:13:43

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

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

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

控制器类=模型class

  • ImageCollection =模型class

  • ImageDataController =
  1. ImageCahce .

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

票数 1
EN

Stack Overflow用户

发布于 2012-07-19 09:12:32

您的ImageCache类就是模型级别类的一个示例。它对任何UI都一无所知。好的MVC会说view类,就像你的网格视图一样,永远不应该直接和Model类对话。这就是控制器的作用。

一种更简洁的实现是让控制器使用ImageCache进行下载,并在下载过程中更新网格视图。这样就把一些业务逻辑移出了网格视图类,让它只关心表示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11552557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档