这样一个领域模型设计究竟好不好?

08-07-03 colingo
    

这是一个"贷款处理应用"中的Borrower模型,一个DDD的应用(来自LoanAppDomainDrivenDesign)。

@Entity
public class Borrower {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long borrowerId;

	private String borrowerType;

	private String firstName;

	private String lastName;

	private String phoneNumber;

	private String emailAddress;

	private long loanId;

	@Autowired
	@Transient
	private BorrowerRepository borrowerRepository;

	public void setBorrowerRepository(BorrowerRepository borrowerRepository) {
		this.borrowerRepository = borrowerRepository;
	}

	/**
	 * @return the borrowerId
	 */
	public long getBorrowerId() {
		return borrowerId;
	}

	/**
	 * @param borrowerId the borrowerId to set
	 */
	public void setBorrowerId(long borrowerId) {
		this.borrowerId = borrowerId;
	}

	public String getFirstName() {
		return this.firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return this.lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getBorrowerType() {
		return this.borrowerType;
	}

	public void setBorrowerType(String borrowerType) {
		this.borrowerType = borrowerType;
	}

	/**
	 * @return the emailAddress
	 */
	public String getEmailAddress() {
		return this.emailAddress;
	}

	/**
	 * @param emailAddress the emailAddress to set
	 */
	public void setEmailAddress(String emailAddress) {
		this.emailAddress = emailAddress;
	}

	/**
	 * @return the phoneNumber
	 */
	public String getPhoneNumber() {
		return this.phoneNumber;
	}

	/**
	 * @param phoneNumber the phoneNumber to set
	 */
	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}

	/**
	 * @return the loanId
	 */
	public long getLoanId() {
		return this.loanId;
	}

	/**
	 * @param loanId the loanId to set
	 */
	public void setLoanId(long loanId) {
		this.loanId = loanId;
	}

	// CRUD Methods
	public void add(Borrower borrower) {
		try {
			borrowerRepository.add(borrower);
		} catch (RepositoryException re) {
			re.printStackTrace();
		}
	}

	public void delete(long borrowerId) {
		try {
			borrowerRepository.delete(borrowerId);
		} catch (RepositoryException re) {
			re.printStackTrace();
		}
	}

	public void update(Borrower borrower) {
		try {
			borrowerRepository.update(borrower);
		} catch (RepositoryException re) {
			re.printStackTrace();
		}
	}

	public Borrower load(long borrowerId) {
		Borrower newBorrower = null;
		try {
			newBorrower = borrowerRepository.load(borrowerId);
		} catch (RepositoryException re) {
			re.printStackTrace();
		}
		return newBorrower;
	}
}
<p>

我有一个疑问,如此设计好不好,将一个repository放入domain object中,是否好呢?这样一来,Borrower自己可以对自己进行更新,查找等等...

    

banq
2008-07-31 12:06

个人认为不好,不要以为将所有业务都塞到一个类中就是实现完整的对象了,要是这样,我们就无需设计了。