пример приложения Model-View-Presenter в nodejs

Я знакомства различные шаблоны MV* и заметили, что MVP используется очень сильно в приложениях .Net, но почти нигде больше.
Единственная другая большая структура, которая, похоже, включает ее, - это GWT, но только в некоторых частях.

  1. почему MVP такая вещь microsoft (почему она не так популярна на других языках)?
  2. есть ли приложение/проект nodejs, который использует MVP (желательно с источником, который я могу посмотреть at)?

5 ответов


чтобы говорить о причине того, что он выглядит как вещь Microsoft, может быть укоренен в дизайнерских решениях по крайней мере 2 крупных компаний и их соответствующих структур. Microsoft включила MVP В. Сеть. В то время как Apple выбрала MVC в какао.

Что касается JavaScript, взгляните на недавний framework Riot.js https://moot.it/blog/technology/riotjs-the-1kb-mvp-framework.html

хотя это не особенно "узел.JS framework", это пример что-то движется к этому термину "изоморфный JavaScript" (слой JavaScript работает на клиенте + сервере), и что можно принести в таблицу, привлекая много инженеров из разных опытов и фонов.

из этой статьи:

модели Riot определяют ваше приложение. Это ваша бизнес-логика, открытая внешнему миру с хорошо продуманным API. Полностью изолированный, тестируемый модуль, который можно запускать в браузере и на сервере (узел.в JS).

из моего опыта и, пожалуйста, простите мое предстоящее общее общее заявление, причина, по которой MVP не так много видно в этой технологии, заключается в том, что многие люди либо не слышали об этом, забыли об этом, или просто не видят большой разницы от того, что такое "контроллер" и что такое "ведущий". Это не означает, что нет никакой разницы, и Теро Пиирайнен довольно хорошо обрисовал ситуацию в беспорядках.статья js для людей, происходящих из другого JavaScript MVC-фреймворки.


не было большой примеры MVP в nodejs. Мы провели кучу исследований и реализовали TODO app Использование шаблона MVP в nodejs и .net.

Это еще не идеально, но я думаю, что это заполняет пробел. Запросы приветствуются.

https://github.com/EchoGlobalLogistics/mvp


tl; dr посмотреть flatiron framework особенно в плагине CLI. Также эта статья https://blog.nodejitsu.com/writing-cli-apps-with-flatiron и его пример раздела.

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

когда вы, как пользователь взаимодействие с виджетом существует много вещей, происходящих. И в какой-то степени может показаться, что сам виджет можно рассматривать как небольшое приложение с собственной бизнес-логической моделью, с собственным представлением и контроллером. Подумайте, например, о выпадающем списке: у него есть набор методов для фактического рисования некоторых прямоугольников на экране, у него также есть методы для представления списка значений в виде текста, и когда вы нажимаете на какой-то элемент, меняется цвет фона и текста, что происходит в соответствии с определенными правила (подумайте о бизнес-логике). Платформа .Net от Microsoft имеет много общего с пользовательским интерфейсом. Вот почему так важно выбрать парадигму, которая будет соответствовать этой цели лучше.

узел, с другой стороны, является полностью бэкэнд-платформой, это не платформа для создания веб-приложений. Я не говорю, что вы не можете или не должны создать веб-приложение с ним. Я говорю, что роль кода узла в веб-приложении должна быть ограничена IO. Получение запросов, отправка ответы, отправка/получение данных в/из хранилищ, возможно, разбор. И вы можете создать структуру для создания веб-приложений поверх узла, конечно.

пытаясь следовать MVP при создании веб-приложения, вы, вероятно, захотите иметь Presenter как можно ближе к фактическому рендерингу виджетов. В случае веб-приложений, которые будут браузером. Узел в этом случае будет играть роль сервера REST (или любой другой предпочтительный способ обмена данными может использоваться вместо отдохнуть здесь.)

существует другой класс приложений, которые узел может быть использован для создания. Это будут приложения CLI. Здесь вы можете создавать приложения с помощью MVP и иметь ведущего в узле. Чтобы найти примеры, я бы предложил посмотреть на flatiron web рамки который имеет хорошую поддержку для создания приложений cli, а также имеет несколько примеров таких приложений:https://blog.nodejitsu.com/writing-cli-apps-with-flatiron.

также есть https://github.com/mscdex/node-ncurses. Это может дать вам шанс "свернуть свой собственный MVP". Что является хорошей практикой, когда ваша цель-исследовать вещь.


недавно мы использовали nodejs с express для создания веб-приложения. Работая над ним, мы построили небольшую структуру поверх express, чтобы лучше организовать наш код. Платформа заставляет вас писать отдельные обработчики (презентаторы) для запросов GET и команд для запросов POST. (См. martinfowler.com/bliki/CQRS.html). Структура также заставляет шаблон Post-Redirect-Get (en.wikipedia.org/wiki/Post/Redirect/Get), разрешая только перенаправление из команд. НПМ пакет expressmvp (https://www.npmjs.org/package/expressmvp).


Это, безусловно, можно использовать узел в MV* моды. Вот несколько действительно хороших вопросов/ответов, которые я использовал в качестве руководства при структурировании моих приложений:

как выразить.приложение js?

ExpressJS, как структурировать приложение?

есть несколько фреймворков для Node, а также, которые основаны на MV*:

  • Матадор
  • новый паруса.js (на основе off of Rails)
  • большинство фреймворков узлов построены на Экспресс.js, который может быть адаптирован для MV*, как объяснено в ответах выше.

здесь образец приложение построенный на чистом экспрессе в моде MV*.