これは一種の一般的な質問として意図されていますが、最初に具体的な問題を説明します。
現在、さまざまなウィジェット (ラベル、テキスト フィールドなど) が配置されたフレームの形をとるプログラムの 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
などを作成し、これらすべてのメソッドを呼び出すクラスにメソッドを作成する必要があることを示唆しています (これらの新しいクラスを拡張できる抽象クラスを作成することもできます)。 SequenceTextField
draw
drawGuiFrame
Layout
draw
これには、他にもいくつかの直接的な利点があります。ラベルとテキスト領域だけでなく、チェックボックスのシステムを組み込みたいとします。次に、それを独自のクラスとして宣言し、プロパティなどを指定してisOptionA
、isOptionB
どのチェックボックスがチェックされたかを記録できます。
しかし、2 つの理由から、この方法で GUI を実装するのには少し気が進まない。まず、非常に多くの新しいクラスを作成すると、多くの小さな.java
ファイルでコードベースが乱雑になります。第 2 に、これらは非常に「使い捨て」のクラスです。クラスは純粋にこの特定の GUI 用に設計されているため、コードを再度使用することはありません。
それで、何クラスが多すぎますか?クラスであるべきだと思うからといって、一度だけ使用する新しいクラスをたくさん作成してもよろしいですか? 私が言うように、この特定の問題に固有のアドバイスを歓迎しますが、いつ新しいクラスを追加するのが適切かについて、より一般的な指針も探しています。