我有一个表单应该绑定到一个包含很多子对象的复杂对象,每次在加载这个表单之前,我必须在一个只有很多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
要求(即,如果 Name 对象属性为空,则 Employee 实体将不会持久化,另一方面,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());