iPhone - 当视图层次结构与模型层次结构具有并行结构时应用MVC

时间:2010-07-21 19:45:12

标签: iphone model-view-controller

我有一个Triangle课程。每个三角形具有三个边a,b和c,还有三个角度angleA,angleB和angleC。除了尺寸(长度或角度)之外,每个数据还存储它是由用户输入还是基于与其他数据的几何关系计算。

对应于我的Triangle类,我有一个TriangleSidesAndAnglesView。该视图有六个子视图 - 每个角度一个,每个边一个。子视图的内容取决于模型类中的信息。子视图都是TriangleDatumView类。

信息可以双向传递。例如,如果用户在与边或角度对应的文本字段中输入内容,则需要将输入的值传递给模型。

我想弄清楚如何保持一切井井有条。例如,TriangleDatumView对象是否应包含对模型类中相应对应成员的引用? TriangleSidesAndAnglesView是否需要保留一个TriangleDatumView对应于哪个模型对象的表?如果(例如)边缘b的TriangleDatumView知道它显示的边缘的名称是“b”,那么它每次都可以写“b =”。 。 。还是从模型中获取信息?

这里没有什么是根本困难的。挑战在于以合理的方式组织这一切。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我问自己的一个问题是“我希望能够独立改变什么?” - 意思是,如果我有一个模型,我可以想象一个完全不同的相同界面的实现或相同模型的完全不同的视图。在我关心的变化中,需要做什么。

因此,如果标签总是A,B和C - 我认为没有理由在模型中存储标签。如果他们可以改变,那么是的,你不应该在视图中对它们进行硬编码。

MVC中的视图通常具有对他们正在查看的模型的引用。有时控制器是中介。模型通常不应包含对视图的引用 - 而是使用委托之类的东西来警告其状态的变化。

我在“做最简单的事情,不要重复自己,必要时重构”阵营。在开始时构建复杂性的问题在于它在错误的轴上可能很复杂 - 让这些特性决定接口如何增长。

答案 1 :(得分:0)

视图控制器可以位于模型和视图之间,管理TriangleView个实例的数组。控制器根据模型中的内容添加,修改和删除视图,并根据父视图的更改(键入文本字段,点击和拖动以及其他UI操作等)对模型实例执行相同操作。