1

Java プロジェクトの構造や、クラス、インターフェースなどに関するベスト プラクティスに興味があります。

優れたベスト プラクティスに従っている優れたオープン ソース プロジェクトを誰かが知っていれば、それを感謝します。すべてがわずかに異なるようで、トピックに関するOracleのドキュメントとまったく矛盾しています。誰かが私に内訳を与えることができれば(または理論的プロジェクトのための私の構造の批評)、それは高く評価されるでしょう. /src、bin、lib、doc など、および com.* 構造をかなりよく理解していると思います。私の問題は、各クラス、各ファイルなどに正確に何があるべきかです。

私の最大の問題は、クラス間で機能を正確に分割する方法です。例えば; 私は2つのクラスを持っています:

Person.java Runner.java (これはエントリ ポイントです。エントリ ポイントの命名規則はありますか?また、main()、run() などを含むクラスは異なる「階層」のようです....方法エントリポイントをどこに置くべきかを決める? main () だけのクラスを作るべきか? (そして必要な計算を実際に実行するべきか?)

Person は、あなたが期待するすべての共通変数を持っています....

int height, weight;
String ethnicity;
boolean gender; etc.etc.
Person(int h, int w.....) {this.height=h....}
public getters/setters for all variables

現在、次の 2 つのことを行うプログラムを探しています。

  • すべての Person のすべての属性を取得し (Person() の配列をインスタンス化したとします)、それらを String に連結し、それを新しい Array に追加します。

  • 身長、体重の順で人を並べて、リストに入れます。

まず最初に; Person クラスにメソッド「String concatToString(){}」が必要か、または連結を行うコードが Runner にある必要があります...たとえば:

ランナー.java:

public class Runner {

String getPersonString(Person p) {
   StringBuffer Sb = new StringBuffer();
   Sb.append(p.get(height));
   etc.
   return Sb.toString();
}

main() {
   for(int i=0; i<arr.len; i++) {
       getPersonString(arr[i]);
   }

   //more code that we will be further executing etc...; mostly just function calls in
   class Runner
}
}

2番目の問題については、これにどのようにアプローチすればよいですか...新しいクラスを作成します。runner.java に priorityQueue とコンパレータを作成しますか? コンパレータを持つ別のクラス PersonPQueue を作成しますか?

これらの問題は常にコードに表示され、コードを正しく分割する方法がわかりません。素晴らしく明確な例は大歓迎です。私はいくつかのオープン ソース プロジェクトをチェックアウトしましたが、その多くは大きすぎて妥当な時間内に設計上の決定に頭を悩ませることができなかったり、矛盾した設計上の選択をしたりしていました。

ありがとう!

4

1 に答える 1