Да или нет: должны ли модели в MVC содержать логику приложения?

Вчера у меня было некоторое обсуждение с одним из наших разработчиков относительно MVC, точнее о роли компонента модели в MVC.

На мой взгляд, модель должна просто содержать свойства и почти не иметь функциональности, поэтому в классах моделей будет как можно меньше методов.

Тем не менее, мой коллега считает, что модели могут и должны иметь нечто большее и предлагать гораздо больше функциональности.

Вот пример, о котором мы спорили.

Пример 1

Позволять'Скажем, мы хотели создать блог. Блог имеет статьи и теги. Каждая статья может иметь несколько тегов, и каждый тег может принадлежать нескольким статьям. Таким образом, здесь мы имеем отношение m: n.

В псевдокоде это 'вероятно, выглядело бы примерно так:

class Article{
    public int id;
    public String title;
    public String content;
    public Tag[] tags;

    // Constructor
    public void Article(id, title, content, tags){
        this.id = id;
        this.title = title;
        this.content = content;
        this.tags = tags;
    }
}

class Tag{
    public int id;
    public String name;

    // Constructor
    public Tag(id, name){
        this.id = id;
        this.name = name;
    }
}

Теперь предположим, что мыздесь мы работаем свободно, что означает, что может случиться так, что у нас есть экземпляр Article, у которого еще нет тегов, поэтому мыЯ использую Ajax-вызов (к нашему бэкэнду, в котором есть база данных, содержащая всю информацию), чтобы получить теги, которые принадлежат нашей статье.

Здесь начинается сложная часть. Я считаю, что получение серверных данных через Ajax + JSON должно быть контроллеромs работа с использованием выделенного класса, который обрабатывает ajax-запрос с использованием парсера:

class MyController{
    private void whatever(articleID){
        Article article = (Article) ContentParser.get(articleID, ContentType.ARTICLE);
        doSomethingWith(article);
    }
}

public abstract class ContentParser{
    public static Object get(int id, ContentType type){
        String json = AjaxUtil.getContent(id, type.toString()); // Asks the backend to get the article via JSON
        Article article = json2Article(json);

        // Just in case
        Tag[] tags = article.tags;
        if (tags == null || tags.length 

Ответы на вопрос(5)

Ваш ответ на вопрос