【问题标题】:Model-View-Controller for this App (Matrix Manipulation)此应用程序的模型-视图-控制器(矩阵操作)
【发布时间】:2012-04-16 01:26:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 一般来说;很高兴你在开始编码之前问了这个问题。严格来说:视图或模型中没有业务逻辑。对于您的示例,可以提出一个非常严格的结构,但我会尽量保持一点实用性。将所有业务逻辑放入 viewController(行 mul,矩阵算术,..)。

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


【解决方案1】:

但我主要对何时使用 View 或 ViewController 感到困惑。 MatrixRow 和 Matrix 的视图似乎更容易,因为它们只会 最终被subviews添加到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 类存储数据,并提供对矩阵有意义的操作。它知道如何在屏幕上显示数据,或者数据来自哪里,或者给定的矩阵如何在您的应用程序中使用。

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

您设置程序的具体方式部分取决于个人喜好——有些人似乎喜欢只存储数据的非常简单的模型。就个人而言,我会将与矩阵相关的所有内容都放在模型中,而忽略与您计划如何在应用中呈现矩阵有关的所有内容。

假设您刚刚完成了您的应用程序,您的下一个任务是将其转换为提供完全不同类型的用户界面,例如命令行界面或 Web 界面。如果您要这样做,您是否期望必须重写您的矩阵乘法代码?矩阵逆的定义会改变吗?在这两个方面都“不”——这些东西属于模型。您的整个 Matrix 类应该可以在执行相同操作但提供不同 UI 的程序中重用。

【讨论】:

  • 感谢您的回复。它回答了我所有的问题,而且非常清楚!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 2013-03-13
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多