3

私は C# を使用していますが、これはほとんどのプログラミング言語に当てはまると思います。

ここで哲学的な質問。Windows フォーム アプリケーションを作成するときは、UI とデータ構造を分離するように努めています。しかし、オブジェクト指向に関して、私はそれを最善の方法で行っているのだろうか。

たとえば、MyClass があり、アプリケーションがそれらの多くを必要とし、おそらく List に格納されている場合、その List を Form1 のメンバーにする必要があります (Form1 が「メイン」フォームです)。そうでない場合、どこでリストをインスタンス化する必要がありますか? 公的宣言と私的宣言について何か意見はありますか?

public partial class Form1 : Form 
{
  private List<MyClass> myClassList; // good idea? Bad idea?

  public Form1 ()
  {
    InitializeComponent();
  }
}
4

3 に答える 3

3

場合によります。フォーム コントロールなど、UI に関連するものがリストに格納されている場合は、そのリストが最適な場所になる可能性があります。

それ以外の場合は、コンテキストに依存します-ここでは全体を見ることができません.

編集:ある時点で、フォームは非 UI クラスの 1 つのインスタンスへの参照を保持する必要があります。私は、これらのオブジェクトの 1 つがリストを保持するものであるべきだと思います (ただし、これ以上のコンテキストがなければ、100% 確信することはできません)。

ロジックをフォームからできるだけ独立した状態に保つようにしてください。つまり、フォームからできる限りリストを操作せず、非 UI クラスからできる限り操作します。最終的に、フォームがリストへの参照を保持する必要がまったくないことに気付くかもしれません。

もう一度編集します。ペット ショップ用のシステムがある場合、Kennelクラスと、 Pupクラスのアイテムを保持する一般的なリストがあるとします。犬小屋インスタンスは、UI ではなく、子犬のリストを保持します。この小さな例が私の要点をより明確に示していることを願っています。

于 2013-08-19T18:33:11.827 に答える
1

それは、データの範囲と、それらに対して定期的に実行する操作の種類を選択することです。たとえば、プログラムの他の部分にそのリストについて知ってもらいたい場合がありますが、存在することさえ知らなくてもよい場合があります。また、実際にはクラスForm1に関係のない方法でそのリストに対して操作を実行し始めると、事態が混乱する可能性があります。Form1

新しい変数を作成するときはいつでも、いくつかの質問を自問してください。他のクラスはこの変数について知る必要がありますか? この変数に対して、フォームに依存しない操作を実行する必要がありますか? この変数は本当にフォームに属していますか?

これらのタイプの質問を自問することで、将来の時間を節約し、プログラムをより読みやすく、保守しやすくすることができます。

于 2013-08-19T18:36:58.633 に答える
0

オブジェクトのリストの内部表現は悪くありません (ただし、フォームを描画するためだけに必要な場合は余分なメモリを浪費する正当な理由があるはずです)、リスト (フォームを意味のあるレンダリングする必要がある場合)コンストラクターの引数にする必要があります。

于 2013-08-19T18:30:51.697 に答える