しかし、私は主に、View または ViewController をいつ使用するかについて混乱しています。ビューは、最終的に ProblemViewController に追加されたサブビューになるため、MatrixRow と Matrix の方が簡単に見えますが、ロジックをビューに投入することは許容されますか?
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 を提供するプログラムで再利用できる必要があります。