しかし、主に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クラスは、データを格納し、それが行列のために意味をなす操作を提供します。 は、ではデータを画面に表示する方法、データがどこから来るのか、またはアプリケーションで所定のマトリックスをどのように使用するかを知っていません。
モデルでは、 にすべてのエントリが格納されている行列モデルを作成しますか?また、すべてのロジックを保持するMatrixRowモデル には行が掛けられますか?あるいは、論理はモデルに含まれていないと考えられます。
あなたのプログラムの設定は、部分的に個人的な好みの問題です。データを保存するだけの非常に裸のモデルが好きな人もいます。個人的には、一般的にマトリックスに関係するすべてのモデルをモデルに入れ、アプリ内にマトリックスをどのように表示するかを特定するためのすべてのものは除外します。
あなたのアプリが完成したばかりで、次のタスクはコマンドラインインターフェイスやウェブインターフェイスなどの全く異なる種類のユーザーインターフェイスを提供するように変換することです。もしあなたがそれをしたら、行列乗算コードを書き直さなければならないと思いますか?行列の逆関数の定義が変わるでしょうか?両方のカウントで「いいえ」 - モデルに属するもの。Matrixクラス全体は、同じことをするが、別のUIを提供するプログラムで再利用可能にする必要があります。
一般的に言えば、コードを開始する前にこの質問をしてうれしく思います。厳密に言えば、ビューやモデルのビジネスロジックはありません。あなたの例では、本当に厳しい構造を考え出すことができますが、私は少しでも実用的なままにしようとします。すべてのビジネスロジックをviewController(row mul、matrix arithmetrics、..)に配置します。 – Till