此应用程序的模型 - 视图 - 控制器(矩阵操作)

时间:2012-04-16 01:26:30

标签: objective-c ios model-view-controller

我正在制作一个操作矩阵的应用程序,我想知道如何为它建立一个好的MVC系统。

基本上,我已经知道我需要做三件事:

  1. MatrixRow(保存每行的条目,可以通过乘法操纵行)
  2. Matrix(包含一堆矩阵行,可以添加新行,减去行,更改行)
  3. ProblemViewController(显示矩阵并允许用户与矩阵交互以解决它)
  4. 但我主要想知道何时使用View或ViewController。对于MatrixRow和Matrix来说,视图看起来更容易,因为它们最终只是添加到ProblemViewController的子视图,但将逻辑放入视图是否可以接受?

    就模型而言,我是否制作了一个包含所有条目的数组的Matrix模型?还有一个MatrixRow模型,它包含所有乘法行的逻辑?或者逻辑不应该在模型中。

1 个答案:

答案 0 :(得分:1)

  

但我主要是在何时使用View或ViewController时感到困惑。   对于MatrixRow和Matrix来说,视图看起来更容易,因为它们只是   最终是子视图添加到ProblemViewController,但它是   可以接受将逻辑投入到视图中吗?

MVC架构的重点是将数据和业务逻辑(模型)与表示(视图)分开。您可能拥有知道如何显示矩阵行或整个矩阵的视图类,但实际存储和操作数据的对象应与这些对象分开。

矩阵的模型可能如下所示:

@interface Matrix : NSObject
{
    int rowCount;
    int columnCount;
    double *entries;
}

- (id)initWithRows:(int)rows columns:(int)columns data:(double*)data

- (double)entryAtRow:(int)row column:(int)column;

- (void)setEntry:(double) forRow:(int)row column:(int)column;

- (Matrix*)matrixByMultiplying:(Matrix*)m;

- (Matrix*)inverse;

- (Matrix*)transpose;
@end

因此Matrix类存储数据,并提供对矩阵有意义的操作。它知道如何在屏幕上显示数据,或者数据来自何处,或者如何在您的应用程序中使用给定的矩阵。

  

就模型而言,我是否制作了一个具有数组的Matrix模型   持有所有条目?还有一个包含所有逻辑的MatrixRow模型   乘以行?或者逻辑不应该在模型中。

你设置程序的确切方式部分取决于个人偏好 - 有些人似乎喜欢非常简单的模型,除了存储数据之外什么都不做。就个人而言,我会将模型中的所有内容放在与矩阵相关的一般内容中,并忽略所有与您计划在应用程序中呈现矩阵相关的内容。

想象一下,您刚刚完成了应用程序,您的下一个任务是将其转换为提供完全不同类型的用户界面,如命令行界面或Web界面。如果你这样做,你是否希望重写矩阵乘法代码?矩阵的定义是否会发生变化?两者都“不” - 这些东西属于模型。您的整个Matrix类应该可以在一个程序中重复使用,该程序执行相同的操作但提供不同的UI。