2012-04-16 2 views
1

私は行列を操作するためのアプリケーションを作っています。それに良いMVCシステムをセットアップする方法を知りたいのですが。このアプリケーションのためのモデルビューコントローラ(マトリックス操作)

  1. MatrixRow(各行のエントリを保持し、乗算によって行を操作することができます)
  2. マトリックスは、(の束を保持している:

    は基本的に、私は主に3つの事をする必要がありますことを持っています行列の行、および、新しい行を追加する行を引くことができ、変更行)

  3. ProblemViewController(マトリックスを示し、それを解決するために、マトリックスとの対話をユーザーに許可する)

しかし、私は主にウィット混乱していますh ViewまたはViewControllerを使用するタイミング。 MatrixRowとMatrixのビューは、最終的にはサブビューがProblemViewControllerに追加されるだけなので、ビューはより簡単に見えますが、ビューにロジックを入れても問題ありませんか?

モデルに関しては、すべてのエントリを保持する配列を持つMatrixモデルを作成しますか?行を掛けるためのすべてのロジックを保持するMatrixRowモデル?あるいは、論理はモデルに含まれていないと考えられます。

+0

一般的に言えば、コードを開始する前にこの質問をしてうれしく思います。厳密に言えば、ビューやモデルのビジネスロジックはありません。あなたの例では、本当に厳しい構造を考え出すことができますが、私は少しでも実用的なままにしようとします。すべてのビジネスロジックをviewController(row mul、matrix arithmetrics、..)に配置します。 – Till

答えて

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クラスは、データを格納し、それが行列のために意味をなす操作を提供します。 は、ではデータを画面に表示する方法、データがどこから来るのか、またはアプリケーションで所定のマトリックスをどのように使用するかを知っていません。

モデルでは、 にすべてのエントリが格納されている行列モデルを作成しますか?また、すべてのロジックを保持するMatrixRowモデル には行が掛けられますか?あるいは、論理はモデルに含まれていないと考えられます。

あなたのプログラムの設定は、部分的に個人的な好みの問題です。データを保存するだけの非常に裸のモデルが好きな人もいます。個人的には、一般的にマトリックスに関係するすべてのモデルをモデルに入れ、アプリ内にマトリックスをどのように表示するかを特定するためのすべてのものは除外します。

あなたのアプリが完成したばかりで、次のタスクはコマンドラインインターフェイスやウェブインターフェイスなどの全く異なる種類のユーザーインターフェイスを提供するように変換することです。もしあなたがそれをしたら、行列乗算コードを書き直さなければならないと思いますか?行列の逆関数の定義が変わるでしょうか?両方のカウントで「いいえ」 - モデルに属するもの。Matrixクラス全体は、同じことをするが、別のUIを提供するプログラムで再利用可能にする必要があります。

+0

お返事ありがとうございます。それは私の質問のすべてに答えて、とても明確でした! – Derek

+0

素晴らしい - 喜んで助けてください。 – Caleb

関連する問題