我正在制作一个操作矩阵的应用程序,我想知道如何为它建立一个好的MVC系统。
基本上,我已经知道我需要做三件事:
但我主要想知道何时使用View或ViewController。对于MatrixRow和Matrix来说,视图看起来更容易,因为它们最终只是添加到ProblemViewController的子视图,但将逻辑放入视图是否可以接受?
就模型而言,我是否制作了一个包含所有条目的数组的Matrix模型?还有一个MatrixRow模型,它包含所有乘法行的逻辑?或者逻辑不应该在模型中。
答案 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。