Как мне моделировать изменения записи?

#oop

#ооп

Вопрос:

Допустим, мне нужно создать модель для некоторого портала, такого как Stack Overflow, и у меня есть класс Question .

Хорошая ли идея иметь такой класс?

 public class Question
    {
        public Guid Id { get; set; }
        public int IdCreator { get; set; }
        public List<QuestionRevision> QuestionRevisions { get; set; }
        public List<Comment> Comments { get; set; }
    }
  

и класс QuestionRevisions с такими полями, как Editor и Content ?

Ответ №1:

Я бы начал с чего-то вроде:

 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
  

Итак, основные моменты здесь:

  • guid и текст вопросов передаются объекту при построении. Они должны быть проверены (т.Е. ненулевые). Рассмотрите шаблон Builder, если Question требуется дополнительная настройка.
  • К вопросу добавляется одна ревизия
  • К вопросу добавляется один комментарий
  • Доступ к неизменяемым представлениям комментариев и изменений осуществляется через средства получения.

Мне почти никогда не нравится видеть класс, который является чисто держателем для коллекции, например QuestionRevisions . Question это хороший выбор для управления собственными ревизиями и внутреннего использования собственной соответствующей структуры данных для их хранения (например, список имеет смысл). Без дальнейших Editor подробностей, и Content я не уверен, что смогу выполнить какой-либо значимый псевдокод для QuestionRevision .