Веб-застосунок на базі Sinatra

Для мого першого проєкту на Sinatra я створив веб-застосунок системи управління контентом (Content Management System) для користувачів і їхньої колекції аналогових синтезаторів (Analog Synthesizers).

Для цього застосунку я використав фреймворк (framework) Sinatra з парадигмою MVC (Model-View-Controller). Sinatra — це веб-фреймворк на основі Rack, який є мовою, спеціалізованою на певній доменній області (Domain Specific Language). Парадигма MVC — це патерн проєктування програмного забезпечення, який розділяє застосунок на групи файлів зі специфічними завданнями. Моделі (Models) містять логіку веб-застосунку, яка може маніпулювати даними. Подання (Views) — це інтерфейс користувача, де відбувається взаємодія. Це файли .erb (embedded Ruby), які можуть містити HTML, CSS і JavaScript. Контролери (Controllers) є посередниками між моделями. Ці файли передають дані від браузера до застосунку і назад. Вони містять маршрути для обробки HTTP-запитів, таких як GET, POST, PATCH і DELETE. Запити можуть бути передані моделям для виконання коду над ними, а потім відображення файлів .erb (View) для користувача.

Active Record

Active Record — це система об’єктно-реляційного відображення (Object Relational Mapping, ORM). Вона дозволяє розробникам програмного забезпечення легко отримувати доступ до даних у базі даних і маніпулювати ними без необхідності знання SQL. Active Record дозволяє виконувати значний обсяг роботи за короткий час. У Active Record є багато функцій, але для мого застосунку я використав лише основні — CRUD.

CRUD — це акронім від Create (створення), Read (читання), Update (оновлення) та Delete (видалення). Active Record має вбудовані методи, які дозволяють читати і змінювати дані, що зберігаються в таблицях бази даних.

MVC

Файлова структура, яку я використав на основі MVC, виглядає так:

pic

Як ви можете помітити, для моделей, подань і контролерів є кілька файлів. Причина цього полягає в тому, щоб розділити специфічні завдання між файлами, що спрощує розуміння та відлагодження коду.

models

Файл user.rb переважно використовується для валідації (validation) та визначення асоціації hasmany_ з :analog_synthesizers.

Файл analog_synthesizer.rb, подібно до user.rb, використовується для валідації та визначення асоціації belongsto_ з :users.

views

Є кілька файлів .erb, які організовані в 3 каталоги: analog_synthesizers, users та sessions. Назви файлів .erb говорять самі за себе.

Файл layout.erb розташований у кореневому каталозі директорії views. Цей файл використовується для додавання спільних елементів, які використовуються на кількох сторінках вашого застосунку, наприклад, навігація, заголовки, нижні колонтитули тощо.

controllers

Файл analogsynthesizercontroller.rb містить маршрути, специфічні для аналогових синтезаторів, такі як “/analogsynthesizers/new” та “/analogsynthesizers/:id”.

Файл application_controller.rb містить маршрут до домашньої сторінки, а також допоміжні функції (helpers) і деякі налаштування, такі як увімкнення сесій (sessions) і встановлення session_secret.

Я також створив файл sessions_controller.rb для маршрутів, таких як “/login” та “/logout”.

Останній з контролерів — users_controller.rb, і, як ви, мабуть, уже здогадалися, цей файл містить маршрути, специфічні для користувачів.

config

Директорія config містить файл environment.rb, який має кілька завдань. У ньому зберігається інформація про підключення до бази даних, а також список файлів, необхідних для роботи вашого застосунку.

db

Ця директорія містить базу даних (у нашому випадку sqlite3), schema.rb, що описує структуру бази даних, та каталог migrate, який містить кілька файлів міграцій (migrations), що використовуються для створення, додавання та зміни структури бази даних.

Кожен файл має позначку часу (time stamp), тому ви можете скасувати будь-які зміни, які зробили.

public

Директорія public містить підкаталоги для зображень, таблиць стилів (stylesheets) для CSS-файлів і favicon.ico, який є іконкою вкладки у вашому браузері.

Решта файлів у кореневій директорії

.gitignore - Містить список файлів, які ви НЕ хочете завантажувати на Github.

config.ru - Це файл Rack, який містить список ваших контролерів (controllers) і команду запуску (run command) для вашого застосунку, а також багато іншого.

Gemfile - Містить список усіх Gems, від яких залежить мій застосунок.

Rakefile - Частина Gem Rake. Це дозволяє додавати завдання, наприклад, команди для запуску Pry або створення резервних копій бази даних.

README.md - Назва говорить сама за себе. Я використав цей файл для додавання інструкцій щодо запуску мого застосунку, наприклад, команди run bundle install.

Я сподіваюся, що це пояснює, що і чому я створив таку файлову структуру для розробки мого CMS для аналогових синтезаторів.

Дякую,

Joe McPartland

Перекладено з: Sinatra Web Application

Leave a Reply

Your email address will not be published. Required fields are marked *