Шаблон MVC, нет базы данных, где хранить объекты?

Я работаю над школьным проектом и или задача - разработать инструмент управления проектами. Нам разрешено использовать любой шаблон проектирования, если мы можем объяснить, насколько он хорош в соответствии с принципами GRASP.

Я дам краткий обзор инструмента проекта:

  • CRUD-функционал для проектов
  • CRUD-функционал для задач (у проекта есть задачи)
  • CRUD-функциональность для пользователей (пользователю назначаются задания)
  • Простой графический интерфейс

Мы решили использовать MVC-шаблон, и нам не разрешено использовать базу данных. Мой вопрос: где я должен хранить объекты?

Должен ли я сделать это в контроллере? В настоящее время мы делаем это так:

public class ProjectController
{
    private ArrayList<Project> projects;

    public ProjectController(TaskController taskController)
    {
        projects = new ArrayList<Project>();
    }
}

У меня есть ощущение, что что-то не так с хранением объектов в контроллере, но я не могу объяснить, почему. Кто-нибудь может объяснить, что является лучшей практикой в ​​соответствии с принципами GRASP?

РЕДАКТИРОВАТЬ: Спасибо, вы узнали от всех что-то, но можно выбрать только один ответ.

4 ответа

Решение

Увеличьте абстракцию. Создайте модельный класс. Создайте свой arraylist (модельные объекты) там. Ваш контроллер все еще должен обращаться к / вызывать методы модели.

Завтра, возможно, вы захотите сбросить эти данные в файл или в БД, и вам придется сделать это с нынешним дизайном. Так что отделите вашу модель от контроллера и держите дизайн в чистоте.

Для очень короткого ответа: НЕТ, не помещайте свой магазин в контроллер. Это плохая идея, и она идет вразрез с принципом MVC.

Обычно модель является единственным местом, ответственным за ваши данные, но часто М-часть разбивается на:

  • Извлечение данных.
  • Хранение данных в приложении.

Интересно то, что никого не волнует, откуда берутся ваши данные. База данных, файл, API отдых. что угодно, это не имеет значения.

Я не говорю, что у меня есть лучшее решение для вас, но вот как вы могли бы сделать это на примере.

  • Вы сохраняете свои пользовательские данные в файл.
  • Вы создаете класс php UserDataRepository который выбирает файлы пользовательских данных и устанавливает данные в ваш UserModel учебный класс.
  • Из контроллера вы звоните UserDataReposiroty и верни свой UserModel,

Таким образом, ваш контроллер не имеет представления о том, как вы извлекаете данные. Он просто просит репозиторий извлечь их, и он возвращает UserModel, которым контролеру разрешено манипулировать.

Я надеюсь, что это поможет вам

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

Может быть, не сейчас, но тогда вам понадобится база данных. С шаблоном DAO не составит труда адаптировать ваш текущий вид персистентности к базе данных.

В паттерне MVC M означает модели, V означает представление, C означает контроллер. Обычный прогресс приложения MVC состоит в том, что, как только приходит запрос, контроллер получает его и выполняет необходимую обработку, извлекая данные результатов, а затем передает данные результатов для просмотра для визуализации. После визуализации слоя представления он отображается пользователям через графический интерфейс.

Таким образом, контроллер может рассматриваться как командующий, он контролирует процесс, но не очень хорошо обрабатывать получение данных в контроллере. Модель должна отвечать за поиск и организацию данных. Это означает, что объекты данных должны храниться в модели вместо контроллера, контроллер вызывает модель для извлечения объектов данных. принимать Java В качестве примера, как правило, необходимы следующие детали:

  1. ProjectControllerэто вызывает ProjectService.getAllProjects() метод для получения результата. Получив слой представления, используйте результат для визуализации графического интерфейса пользователя для отображения. Я предлагаю слой контроллера должен быть тонким.
  2. ProjectServiceУ него есть метод getAllProjects()этот метод вызывает ProjectDAO.getAllProjects() метод для извлечения данных проектов, и, возможно, другой обработки. Здесь идет бизнес-логика.
  3. ProjectDAO, у него есть несколько методов, которые имеют дело с Project объекты, иметь дело с данными в этом слое! Но эти методы должны быть независимы от бизнес-логики (как бизнес-логика должна быть ProjectService).
  4. Project объект.

Надеюсь, поможет.

Другие вопросы по тегам