1

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

基本上,我知道我需要3个主要的东西:

  1. MatrixRow(保存每行的条目并可以通过乘法操作行)
  2. 矩阵(包含一堆矩阵行,并且可以添加新行,减去行,更改行)
  3. ProblemViewController(显示矩阵并允许用户与矩阵交互以解决它)

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

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

4

1 回答 1

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 的程序中重用。

于 2012-04-16T02:13:50.827 回答