2010-07-21 64 views
0

我有一个三角形类。每个三角形有三个边a,b和c,还有三个角度angleA,angleB和angleC。除了大小(长度或角度)之外,每个数据还存储它是由用户输入还是基于与其他数据的几何关系进行计算。iPhone - 当视图层次结构与模型层次结构具有并行结构时应用MVC

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

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

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

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

感谢您的任何帮助。

回答

0

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

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

MVC中的视图通常具有与他们正在查看的模型相关的引用。有时候,控制者是一个中介。模型通常不应该包含对视图的引用 - 而是使用诸如委托之类的东西来警告对其状态的更改。

我在“做最简单的工作,不要重复自己,必要时重构”阵营。一开始就在复杂性方面进行构建的问题在于,它可能在错误的轴上很复杂 - 让功能指示接口的增长方式。

+0

标签不变,但模型确实需要知道哪个边对应于哪个顶点,即A与a相反。所以将它们存储在那里很有用。问题是视图是否应该存储它,或者包含对模型的引用并从那里抓取。 – 2010-07-21 20:08:21

0

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