Шаблон проектирования MVC - PullRequest
3 голосов
/ 21 февраля 2012

Я много читал о шаблонах проектирования MVC, но некоторые вещи до сих пор мне неясны. Я знаю, что «Модель» предназначена для данных и бизнес-логики, «Представление» - для представления, а «Контроллер» - для использования «Моделей» и предоставления «Представлений» (т. Е. С является каналом связи между М и V).

Теперь у меня есть следующая проблема, которую я хочу решить:

Проблема: Веб-приложение принимает в качестве входных данных список узлов от пользователя. Затем модель используется для создания графика (то есть графика структуры данных, а не графика x-y) из этих узлов (с использованием базы данных).

Затем я использую алгоритм Дейкстры, чтобы найти кратчайший путь от начального узла до конечного узла в этом графе. Я использую алгоритм Дейкстры в Модели или Контроллере?

Думаю, мне следует использовать слой Model, потому что сам "кратчайший путь" - это данные.

Но иногда, я думаю, я должен поместить его в контроллер, потому что он использует модели (график и список узлов), чтобы что-то делать.

Может кто-нибудь дать мне правильный ответ? Сейчас я собираюсь реализовать алгоритм Дейкстры на уровне модели.

Ответы [ 5 ]

8 голосов
/ 21 февраля 2012

Да, вы правы.Вы должны поместить алгоритм Дейкстры в модель.Причина в том, что вы можете использовать другой алгоритм, чтобы найти кратчайший путь завтра, поэтому в этом случае вам не нужно менять контроллер, просто измените логику класса, который реализует алгоритм.И результат этого алгоритма должен быть учтен.

3 голосов
/ 21 февраля 2012

Вопрос в том, почему контроллер, а не модель. Это вопрос дизайна больше, чем вопрос кодирования. Это будет работать на контроллере и модели. Но если вам понадобится более одного контроллера в будущем (например, используйте другой алгоритм для кратчайшего пути), и вам нужна ваша модель для выбора контроллера во время выполнения, тогда он должен быть в контроллере. Если в алгоритме «контроллеров» что-то еще, то это должно быть в модели. Может быть, вы хотите использовать кратчайший путь, используя только этот алгоритм, но в будущем вы хотите использовать различные типы данных. Тогда манипулятор данных должен быть в контроллере.

Короче говоря, думайте о будущем и дизайне, и не помещайте его в контроллер только потому, что это хорошо, делайте это потому, что вам нужно «изменение», чтобы быть алгоритмом.

Изменение - вот ключ. Что в будущем вы ожидаете изменить по мере добавления новых функций к продукту.

1 голос
/ 20 апреля 2016

Что ж, если вы прочитаете Head First Servlets и Jsps, вы обнаружите, что ваша логика лучше всего хранится в Model. Почему я так говорю : Если завтра вы подумаете об изменении View Layer вашего приложения, у вас должна быть модель, готовая сделать это. Например: Красота MVC в том, что она дает вам гибкость. Завтра я хочу, чтобы мое приложение запускалось с рабочего стола на веб-сайт или наоборот. Я могу написать всю свою логику отдельно. Паттерн разработки стратегии хорош для расширения, но он снова хочет, чтобы вы написали логику в Model.

1 голос
/ 15 марта 2013

Лично я бы вставил алгоритмы в часть контроллера приложения и использовал шаблон стратегии, чтобы контроллер выбирал соответствующий алгоритм во время выполнения. Если у вас пока только один алгоритм, тогда только этот алгоритм будет выбран с шаблоном стратегии.

Таким образом, ваша модель только представляет состояние приложения и не допускает никакой бизнес-логики. Кроме того, благодаря шаблону стратегии ваш контроллер остается независимым от конкретной реализации алгоритма, и вы можете относительно легко расширить свое приложение для использования других алгоритмов в будущем.

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

0 голосов
/ 21 февраля 2012

Мое личное предложение - идти с контроллером потому что, если вы используете часть модели, это увеличит время выполнения, потому что в конце концов модель будет управляться вызовом контроллера

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

так что мои личные ощущения идут с контроллером вместо модели

спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...