【问题标题】:iOS Which is better design comparing passing the whole class to view or setting piece by pieceiOS 哪个是更好的设计比较传递整个类来查看或逐个设置
【发布时间】:2014-07-13 23:12:40
【问题描述】:

我有一个User 类,它有一些属性,例如姓名、电子邮件、位置。我还有另一节课 称为Post,它具有一些属性,例如titlecontentposter,它是User的一个实例。

有一个 ViewController,在视图控制器内部有一个 PostDetailView 用于显示帖子的详细信息。现在视图控制器有一个 post 对象,我需要将一些值传递给PostDetailView。我有两个选择:

  1. 通过初始化器传递整个post对象,这意味着PostDetailView有一个方法-initWithFrame:post。一旦视图获得了帖子对象,它就可以获取帖子中的所有数据。
  2. PostDetailView有一些setter方法,如setTitle:setContentsetPosterName等。Initializer只初始化view的frame,然后使用setter传值。

选项 1 可以在视图控制器中节省大量工作,但可能会增加耦合。选项 2 具有更好的结构(我认为),但需要在视图和视图控制器中进行额外的工作。因此,我的问题是哪一个在架构方面更好?

【问题讨论】:

    标签: ios objective-c loose-coupling


    【解决方案1】:

    将模型对象传递给视图确实会增加不必要的耦合。设置单个字段更好,因为绑定逻辑在控制器中。

    第三种选择是构建一个只包含视图所需数据的类,并将该类的一个对象传递给视图,而不是传递整个Post

    @interface PostViewData : NSObject
    @property (nonatomic, copy) NSString *title;
    @property (nonatomic, copy) NSString *content;
    @property (nonatomic, readonly) MyUser *poster;
    @end
    

    尽管仍然需要控制器来容纳特定于视图的逻辑,但视图仍然与模型隔离,并且代码变得明确了特定于视图的数据的内容。

    【讨论】:

    • 这被称为“视图模型”。
    【解决方案2】:

    为了支持良好的设计和架构,输入更多内容并将视图与模型分离是有意义的。我习惯使用的一种技术是使用原始类型(字符串、数字等)的属性设计视图,并为视图创建一个类别,该类别具有使用特定类型的模型对象配置自身的方法。

    您可以在此处阅读更多信息:http://www.objc.io/issue-1/table-views.html 他们谈论表格视图,但方法可用于任何带有中介控制器的视图和模型。

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 2011-02-17
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      相关资源
      最近更新 更多