7

これは一種の一般的な質問として意図されていますが、最初に具体的な問題を説明します。

現在、さまざまなウィジェット (ラベル、テキスト フィールドなど) が配置されたフレームの形をとるプログラムの GUI を作成しています。最初はjavax.swingライブラリを使用する予定ですが、同じことを行う Web アプリケーションを簡単に作成できるように、ライブラリと GUI 自体の間に抽象化レイヤーを追加しています。

GUI のレイアウトを表す 1 つのクラスが必要です。つまり、さまざまなラベル、ボタンなどがコンテンツ ペインに配置されている場所に関するすべての情報を含む必要があります。現時点で、私が検討している実装は次のとおりです。

class Layout
{
  public MyLabel titleLabel;
  public myTextField sequenceTextField;
  [...]

  public void drawTitleLabel()
  {
    titleLabel = new MyLabel("This is the title.");
    titleLabel.setLocation(wherever);
    titleLabel.draw();
  }

  public void drawSequenceTextField()
  {
    sequenceTextField = new MyTextField();
    [...]
    sequenceTextField.draw();
  }

  [...]

  public void drawGuiFrame()
  {
    drawTitleLabel();
    drawSequenceTextField();
    [...]
  }
}

そこで、コンテンツ ペインで各ウィジェットを class のフィールドとして宣言し、各ウィジェットを描画Layoutするメソッドを作成します。最後に、 GUI 全体を描画するために drawWidgetName各メソッドを呼び出すメソッドを作成します。draw...

しかし、これは間違っているようです。メソッドは、GUI 全体の大規模なレイアウトではなく、個々のウィジェット自体のdraw...メソッドであるように感じます。これは、それぞれメソッドを持つ個別のクラスTitleLabelなどを作成し、これらすべてのメソッドを呼び出すクラスにメソッドを作成する必要があることを示唆しています (これらの新しいクラスを拡張できる抽象クラスを作成することもできます)。 SequenceTextFielddrawdrawGuiFrameLayoutdraw

これには、他にもいくつかの直接的な利点があります。ラベルとテキスト領域だけでなく、チェックボックスのシステムを組み込みたいとします。次に、それを独自のクラスとして宣言し、プロパティなどを指定してisOptionAisOptionBどのチェックボックスがチェックされたかを記録できます。

しかし、2 つの理由から、この方法で GUI を実装するのには少し気が進まない。まず、非常に多くの新しいクラスを作成すると、多くの小さな.javaファイルでコードベースが乱雑になります。第 2 に、これらは非常に「使い捨て」のクラスです。クラスは純粋にこの特定の GUI 用に設計されているため、コードを再度使用することはありません。

それで、何クラスが多すぎますか?クラスであるべきだと思うからといって、一度だけ使用する新しいクラスをたくさん作成してもよろしいですか? 私が言うように、この特定の問題に固有のアドバイスを歓迎しますが、いつ新しいクラスを追加するのが適切かについて、より一般的な指針も探しています。

4

2 に答える 2

9

別々のクラスを持つことは、私にとって正しいアプローチのようです。クラスをパッケージモジュール、およびサブモジュールに編成して、 「コードベースを乱雑に」しないようにします。Java の大規模なアプリケーションには、その単一のアプリケーションでのみ使用される可能性のある非常に多くのクラスが簡単に含まれる可能性があります。これは、言語としての Java および Java エコシステム全体が機能する方法とほとんど同じです。

Java では、通常、クラスのレイアウトがきめ細かければ細かいほど良いと考えられています。

于 2013-07-29T14:44:36.870 に答える
3

私自身、新しく導入された概念ごとにクラスを作成するのが好きです。通常、特にハードコーディングされたデータを大量に使用する場合、クラスは任意に長くなる可能性があります。神オブジェクトhttp://en.wikipedia.org/wiki/God_objectに注意する必要があります。

一部のクラスにロジックが多すぎると、読みにくくなります。クラスが大きくなりすぎていると思われる場合は、独自のクラスを持つことができるロジックがクラスにあるかどうかを確認してください。

于 2013-07-29T14:45:07.610 に答える