我正在創建一個名爲Question
的類。這個類有答案,所以我想能夠返回附加的答案列表。返回不可變列表
但是,如果用戶對答案進行了更改,我希望用戶調用update-method,以便我可以執行其他驗證等。現在,如果用戶獲得答案列表,他仍然可以通過更改答案說question.getAnswers().get(0).setDescription("BLAH BLAH").
所以我想返回每個答案的副本,並讓用戶改變這一點,他必須合併/更新回到問題。通過這種方法,我可以確保答案是有效的,但答案的equals方法基於description
和correct
字段,而不是基於id
字段,因爲我使用的是JPA。如果用戶使用這種方法更改答案,則更新方法將無法找到答案,因爲說明字段已更改並且不再相同,因此它在列表中找不到它。
任何建議?
public void updateAnswer(Answer answer) {
int index = answers.indexOf(answer);
answers.set(index, answer);
}
public List<Answer> getAnswers() {
return Collections.unmodifiableList(answers);
}
@Test
public void shouldUpdateAnswerInQuestion() {
// Get first answer, make an update on the description
// and then update answer on question.
Answer answerThatWillBeUpdated = question.getAnswers().get(0);
String updatedAnswerDescription = "Hey, it is now updated!";
answerThatWillBeUpdated.setDescription(updatedAnswerDescription);
question.updateAnswer(answerThatWillBeUpdated);
// After updating check that the answer in the list is equal
// to the answer updated.
Answer answerFromList = question.getAnswers().get(0);
assertEquals(answerThatWillBeUpdated, answerFromList);
}
答案類:
public class Answer {
private long id;
private String description;
private Boolean correct;
...
}
誰是「用戶」?他究竟得到了什麼:它的答案是一個獨立的問題,還是附帶的問題與答案?他是否應該修改答案,或者問題及其答案列表?爲什麼你的服務層沒有服務'updateAnswer(Answer a)'? – 2012-02-21 18:17:49
因爲問題是聚合根 – LuckyLuke 2012-02-21 18:44:05