Да или нет: должны ли модели в 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