多くの子をラップする複雑なオブジェクトにバインドする必要があるフォームがあります。このフォームをロードする前に、多くのステートメントとメソッドnew
を呼び出すメソッドですべての子オブジェクトを初期化する必要があります。setter
多くのフォームやその他の複雑なオブジェクトに対してこのシナリオを繰り返す
initializeEmployee
メソッドよりも優れた戦略はありますか?
例えば:
@Entity
public class Employee {
Integer Id;
Contract contract;
Name name;
List<Certificate> list;
// getter and setters
}
@Entity
public class Contract {
String telephoneNum;
String email;
Address address;
// getter and setters
}
@Entity
public class Address {
String streetName;
String streetNum;
String city;
}
public class Name {
String fName;
String mName;
String lName;
// getter and setters
}
// And another class for certificates
public initializeEmployee() {
Employee emplyee = new Employee();
Name name = new Name();
employee.setName(name);
Contract contract = new Contract();
Address address = new Address();
contract.setAddress(address);
employee.setContract(contract);
// set all other employee inner objects,
}
編集:
以下の回答によると、最適な回答はないようです。ただし、エンティティconstructor
またはFactory
デザイン パターンを使用できます。
しかし、両方のソリューションは、すべてのフィールド戦略を必須フィールドとオプションフィールドで初期化する際の私の他の問題を解決しません。
例:Name
必要に応じて(つまり、名前オブジェクト属性が空の場合、従業員エンティティは永続化されませんが、Contract
エンティティはオプションです。空のContract
オブジェクトをデータベースに永続化できないため、作成する必要がありますnull
最初に永続化する前に、次のように永続化後に再初期化します
// Set Contract to null if its attributes are empty
Contract contract = employee.getContract()
if(contract.getTelephoneNum().isEmpty && contract.getEmail().isEmpty() && contract.getAddress().isEmpty()){
empolyee.setContract(null);
}
employeeDAO.persist(employee);
// reinitialize the object so it could binded if the the user edit the fields.
employee.setContract(new Contract());