Создайте структуру MVC поверх Синатры

Я изучаю Синатру, и мне было интересно, если кто-то знает хороший способ создать структуру MVC для проекта с Sinatra. У меня есть идеи, но они кажутся мне слишком громоздкими.

Ответ 1

Sinatra уже "VC" - у вас есть виды, отделенные от ваших маршрутов (контроллеров). Вы можете разбить его на несколько файлов, если хотите; подробнее об этом см. в этом ответе (мой):
Использование Sinatra для больших проектов через несколько файлов

Чтобы добавить "M" (модель), выберите базу данных. Некоторым людям нравится ActiveRecord. Некоторым людям нравится DataMapper. Есть еще много, из которых вы можете выбрать. Я лично люблю и очень рекомендую Sequel. Мой ответ, приведенный выше, также предлагает структуру каталогов и оболочку для включения моделей. Как только вы распределите соответствующую логику между вашими моделями и контроллерами, у вас есть ваш "MVC".

Обратите внимание, что MVC - это не отдельные файлы, а разделение проблем. Если вы настроили приложение Sinatra, как я предлагаю выше, но у вас есть данные, полученные из ваших моделей, или у вас есть маршруты, непосредственно генерирующие HTML (а не через "помощника" ), то у вас действительно нет MVC. И наоборот, вы можете сделать все вышеперечисленное в одном файле и все еще иметь приложение MVC. Просто поместите свою логику целостности данных в свои модели (и что более важно, в самой базе данных), вашу логику представления в своих представлениях и многократные помощники и вашу логику отображения в ваших контроллерах.

Ответ 2

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

Ответ 3

M - это легко использовать ActiveRecord (или что-то еще). У меня есть подкаталог models, содержимое которого получает require d, когда приложение Sinatra загружается.

V также просто - просто поместите свои представления в подкаталог views - Sinatra будет смотреть там автоматически.

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

(Исповедь: я еще не создал сложный комплекс приложений Sinatra, чтобы увидеть необходимость явных контроллеров - там, где такая структура была необходима. Я начал с Rails)