私はすでに私のMilkTeaは、オブジェクトのためのMilkTeaクラスを作成しましたしたMilkTea在庫と発注システムを開発しています。今、私は私のMilkTeaは、ArrayListにオブジェクトのすべてを追加する予定です。私のシステムでは、編集、表示を追加し、Milkteaだけでなく、注文MilkTeasを削除することができるはずです。さて、私の問題は、私は実装すべきプログラムの設計を決定しています。私は私のMilkTea、のために配列リストを作る必要があり、静的な?
- 私の配列リストは、残業を変更することができます。
- milkteasのための私の配列リストも発注に関連する他のクラスにアクセスすることになります。
- 私の配列リストは不変ではありません。
これまでのところ、これはMilkTeasを追加、編集、削除、および表示するための私のクラスです。
package inventory;
import java.util.ArrayList;
public class MilkTeaList {
public ArrayList<MilkTea> list = new ArrayList();
public void addMilkTea(String flavorName,String[] sizes, double[] prices, int stock) {
list.add(new MilkTea(flavorName, sizes, prices, stock));
}
public ArrayList<MilkTea> getList() {
return list;
}
}
データベースを使用している場合、私はあなたがDAOクラスの通常のCRUDメソッドを実装する提案(あなたの現在のクラスを呼び出すMilkTeaListDao
)と、データベースのトランザクションの整合性に依存しています。
ない場合は、あなたのクラスを呼び出すMilkTeaListHandler
かMilkTeaListController
、追加getInstance()
リストを操作する方法を方法を(そして必ずあなただけのプライベートコンストラクタを持つことによって、クラスの1つのオブジェクトがあることを確認してください)、および使用。リストはすべきではない静的であるとメソッドは、トランザクションの整合性を確保するためにグローバルな同期ロックを持っている必要があります。そして、getList()
この方法は、リストではなく、リスト自体のコピーを返す必要があります。
私は私が私の提案のために、いくつかの引数と説明を提供してみましょうあなたはこの質問にいくつかの矛盾の答えを得るに気づきます:
- どこにでも操作することができ、静的リストを使用すると、プロジェクトの開始時に便利ですが、それは最終的にあなたがプロジェクトの存続期間の残りのために対処する必要が頭痛の種に成長することができます。例えば、コードの一部がディスクにリストを格納する(同時に)コードの別の部分は、更新を追加し、リスト内の項目を削除している間(forループを使用して)であると言うことができます。保存機能そのリスト内のレコードがあることを前提としているので、あなたはディスク上に保存されているのか分からない(何が保存または更新、最初に来た)、あなたは(たぶん数年後に)いくつかの段階のget NullPointerExceptionsがでます他の誰かがちょうど削除しました。
- MilkTeaオブジェクトが変化した場合、あなたは全体のコードで更新を行う必要があります。たとえば、追加することを忘れないでください
expireDate
どこにでも。リストを操作するすべてのメソッドが一箇所に集まっている場合、彼ら(あなたは残りのコードでコンパイルエラーが発生しますので非常に簡単には変更が持っているものの効果を参照する)に変更する方が簡単です。 - 追加/削除/更新が広がっている場合、それはまたあなたのMilkTeaを囲むロジックの残りの部分が広がるだろうと思われます。ロジックが変更された場合、あなたは、プロジェクト全体で重複したコードを見つける可能性があり、複数の場所でそれを更新するために、退屈でエラーを起こしやすいとなります。ロジックの例は、エラー処理です。価格はゼロに設定されているシステムは、ファイルから行を読み取ることによって、あなたの株式を更新したときに、例外がスローされることを言うことができます。良い。しかし、ユーザーが手動でWebインターフェイスからの在庫情報を更新することができます機能のために、あなたはその制限を追加するのを忘れ。良くない。操作方法は、一箇所に集まっていた場合、あなたは正確に一度価格==ゼロチェックをしなければならないでしょう、そしてあなたはそれが永遠になります知っているだろう。