Я бы начал с чего-то вроде:
public class Question
private Guid id
private List<QuestionRevision> revisions
private List<Comment> Comments
Question(id : Guid, text : String)
getRevisions() : List<QuestionRevision>
addRevision(revision : QuestionRevision) : void
getComments() : List<Comment>
addComment(comment : Comment) : void
Итак, основные моменты здесь:
- Текст гида и вопросов поступает на объект строительства. Они должны быть проверены (т. Е. Не нулевые). Рассмотрите шаблон Builder, если для
Question
требуется дополнительная настройка.
- К вопросу добавлена одна ревизия
- К вопросу добавлен один комментарий
- Доступ к неизменным видам комментариев и ревизий осуществляется через геттеры.
Мне почти никогда не нравится видеть класс, который является чисто держателем для коллекции, как QuestionRevisions
. Question
- хороший выбор для управления собственными ревизиями и внутреннего использования собственной подходящей структуры данных для их хранения (например, разумен список). Не вдаваясь в подробности о Editor
и Content
, я не уверен, что смогу сделать какой-либо значимый псевдокод для QuestionRevision
.