В предыдущей статье я рассказал о том, почему считаю неэффективной разработку с применением Content Management System. В этой статье, я расскажу о том, какой подход использую в построении веб-приложений.
Альтернативы CMS
В комментариях к предыдущей статье были предложения вместо Content Management System применять Content Management Framework. Это действительно позволяет гораздо гибче проектировать архитектуру веб-приложения, но более затратно по ресурсам.
Я предлагаю альтернативу в виде Data Management System.
Прежде чем продолжить, следует разделить понятия Content Management System, Content Management Framework и Data Management System.
В статье под Content Management System я понимаю систему, которая имеет свою заданную структуру базы данных и набор объектов предметной области.
Под Content Management Framework я понимаю некий набор классов и методов, который помогает автоматизировать работу с данными на уровне программного кода.
Под Data Management System я понимаю автономное веб-приложение, которое предоставляет возможности по управлению данными. При этом
Особенность подхода при разработке с применением системы управления данными
При разработке с использованием системы управления данными идет архитектурное разделение проекта на несколько независимых частей база данных, frontend и backend.
- Frontend – часть веб приложения которая в большинстве случаев включает в себя большое количество экранов с разнообразным дизайном и пользовательским интерфейсом)
- Backend – часть проекта которая в данном случае не требует отдельной разработки и как раз и является системой управления данными.
- База данных – выделена отдельно, поскольку в отличие от подхода с использованием CMS содержит чистую структуру, отражающую предметную область. Таким образом, нет необходимости хранить в базе инородные таблицы, как это обычно бывает при использовании WordPress, Joomla и других CMS.
Следует также заметить, что нам нет необходимости для каждого проекта создавать пользовательский интерфейс, а так же реализовать CRUD-логику (create retrieve update delete — Создание чтение обновление удаление), поскольку этот функционал обеспечивается самой системой управления данными.
Ключевым функционалом, на котором основывается работа Data Management System, является скаффолдинг. Скаффолдинг – это технология поддерживаемая некоторыми MVC фреймворками, которая позволяет используя дополнительное описание (например атрибуты классов) схемы данных строить приложение которое поддерживает CRUD -функционал взаимодействия с базой данных. Одним из проектов, который активно применяет эту технологию является Ruby on Rails. Так же к системам, применяющим скаффолдинг следует отнести ASP.NET Dynamic Data (.NET) и Django (Python).
Итак, в общем случае система управления данными базируется на:
- Scaffolding System Core – система скаффолдинга, которая позволяет динамически строить пользовательский интерфейс на основе классов предметно области.
- Data UI Controls – наборе контролов пользовательского интерфейса которые применяются используются системой скаффолдинга
- Data Description Specification – набор правил по которым классы предметной области дополняются атрибутами помогающими системе скаффолдинга более точно строить пользовательский интерфейс.
Построение веб-приложения с применением DMS
Процесс проектирования с применением DMS можно описать следующим образом:
- Проектирование базы данных
- Создание классов предметной области с применением ORM (Hibernate, EntityFramework, другая система объектно-реляционного отображения).
- Дополнение классов предметной области атрибутами позволяющими точнее строить пользовательский интерфейс. (Например текстовое поле в базе данных может быть отображено в пользовательском интерфейсе как: обычное текстовое поле, многострочное текстовое поле, WYSIWYG-редактор).
- Разработка Frontend части (собственно веб приложение)
- Разработка Backend, которая сводится к конфигурации и при необходимости кастомизация Data Management System (в большинстве случаев для реализации CRUD модели доработка не требуется).
Ниже представлена схема взаимодействия различных компонентов проекта.
Ограничения при применении Data Management System
В случае применения системы управления данными есть и свои ограничения
- Нет возможности разделения прав доступа к конкретным записям таблицы. Однако при необходимости эту проблему можно обойти двумя способами:
- Первый – добавление необходимой логики в механизм выборки данных
- Второй – создание кастомизированной формы для работы с данными, которые требуют сложно проверки прав.
- Необходимость добавления атрибутов к классам предметной области для более корректного построения пользовательского интерфейса.
Преимущества применения DMS
При использовании системы управления данными мы получаем следующие преимущества:
- полное разделения Frontend и Backend частей проекта
- создание и поддержка «чистой» структуры базы данных
- быстрое получение CRUD функционала управления данными
Практическое применение
В своей практике я использую систему управления данными построенную на основе таких компонент как:
- ASP.NET Dynamic Data
- Расширенного набора контролов пользовательского интерфейса
- Спецификации атрибутов применяемых при описании классов предметной области
- Набора атрибутов, базовых классов и интерфейсов для расширения классов предметной области.
В большинстве случаев, при создании веб приложения мне нет необходимости в кастомизации системы управления данными. Например, мне достаточно поменять путь к библиотеке содержащей набор классов предметной области – и я могу управлять совершено другим приложением.
Выводы
Таким образом, технология скаффолдинга в связке с расширенными библиотеками элементов управения и гибкой спецификацией описания атрибутов а классов предметной области позволяет строить гораздо более гибкие и мощные веб-приложения, без ограничений накладываемых распространенными Content Management System.
Ссылки
Эти ссылки будут полезны скорее начинающим разработчикам, чем тем кто уже имеет опыт в построении веб-приложений:
Что такое скаффолдинг (англ.)
Django
ASP.NET Dynamic Data
ASP. NET Dynamic Data — пример использования
Автор: Ernado