- PVSM.RU - https://www.pvsm.ru -
Несколько лет назад я реализовал ряд проектов, для управления которыми использовалась система управления основанная на ASP.NET Dynamic Data [1]. В свое время эта система сэкономила достаточно много времени и ресурсов. Но как известно, в ИТ все развивается очень стремительно. Не так давно вышла в релиз платформа .NET Core, основным нововведением которой была поддержка кроссплатформенности. Это в свою очередь позволило мне мигрировать ряд небольших проектов, а также проектов, которые я поддерживаю на некоммерческой основе на бюджетные сервера от Digital Ocean, которые, как известно, поддерживают только ОС семейства Linux. Когда дело дошло до системы управления передо мной стоял выбор — с минимальным изменением кода портировать проект под Mono, или переписать с нуля использую новые возможности .NET Core. Взвесив все за и против, я выбрал второй вариант. Что из этого вышло и что я собираюсь получить вы можете узнать под катом.
Для для тех кто не в курсе, что такое скаффолдинг, краткое описание этого подхода:
"Скаффолдинг — это метод метапрограммирования для создания веб-приложений, взаимодействующих с базой данных. Этот метод поддерживается некоторыми современными MVC-фреймворками (Grails, Yii, Ruby on Rails, Django, CakePHP, Phalcon PHP, Symfony, ASP.NET Dynamic Data и другими.). Разработчик в них задает спецификации, по которым в дальнейшем генерируется программный код для операций создания определенных записей в базе данных, их чтения, обновления и удаления."[1]
Вдохновившись примером Ruby on Rail в 2007 году компания Майкрософт разработала свой инструмент для быстрого проектирования веб-приложения работающих с данными.
"ASP.NET Dynamic Data – это фреймворк, который позволяет быстро разрабатывать полнофункциональные data-driven приложения, используя LINQ to SQL или Entity Framework, а также расширяет возможности элементов управления DetailsView, FormView, GridView и ListView в плане функциональности, проверки данных и отображения.
Если говорить по простому, то Dynamic Data предназначен для быстрой генерации фронт-эндов для баз данных Microsoft SQL Server."[2]
И сам подход и инструмент ASP.NET Dynamic Data мне понравились. Причем на столько, что как я уже писал выше, я создал свою систему на их основе. Однако, за время использования этого решения у меня появляли различные идеи о том, как можно было бы улучшить этот продукт. И так, к тому, чтобы переписать проект с нуля меня подтолкнул ряд недостатков решения на базе ASP.NET Dynamic Data, среди которых основные:
Исходя из этих недостатков я выделил для себя ряд возможностей, которые я бы хотел реализовать в новом проекте:
На данный момент уже написана основная часть кода, которая позволяет работать с данными несложных по структуре баз.
Процедура работы следующая:
На данный момент в системе предусмотрены (но еще не все реализованы) следующие редакторы для различных типов полей:
{
"Tables": [
{
"Columns": [
{
"Position": 1,
"IsKey": true,
"IsNullable": false,
"Reference": null,
"ShowInGrid": false,
"AutoIncrement": true,
"MaxValue": null,
"MinValue": null,
"MaxLength": null,
"Readonly": true,
"Type": 40,
"Name": "Id",
"Title": "Id",
"Description": ""
},
{
"Position": 2,
"IsKey": true,
"IsNullable": false,
"Reference": null,
"ShowInGrid": false,
"AutoIncrement": true,
"MaxValue": null,
"MinValue": null,
"MaxLength": null,
"Readonly": true,
"Type": 40,
"Name": "Name",
"Title": "Name",
"Description": ""
},
{
"Position": 3,
"IsKey": true,
"IsNullable": false,
"Reference": null,
"ShowInGrid": false,
"AutoIncrement": true,
"MaxValue": null,
"MinValue": null,
"MaxLength": null,
"Readonly": true,
"Type": 40,
"Name": "Value",
"Title": "Value",
"Description": ""
}
],
"ShowInList": false,
"Name": "Setting",
"Title": "Настройки",
"Description": "Системные настройки"
}
],
"Generated": "2016-09-27T00:40:48.9189786+03:00",
"ExtendedConfigurationLoaded": false,
"Name": "Database",
"Title": "Database"
}
{
"Tables": [
{
"Columns": [
{
"Type": 40,
"ShowInGrid": false,
"AutoIncrement": true,
"Readonly": true,
"Name": "Id",
"Title": "Системный идентификатор"
},
{
"Type": 10,
"Name": "Name",
"Title": "Название"
},
{
"Type": 10,
"Name": "Value",
"Title": "Значение"
}
],
"ShowInList": false,
"Name": "Setting",
"Title": "Настройки",
"Description": "Системные настройки"
}
],
"Name": "Описание проекта",
"Title": "База данных"
}
{
"ConnectionString": "Server=...;Database=...;User Id=...;Password=..;",
"SecretKey": "secret-key-123",
"ApplicationRestartCommand": "",
"StorageConfiguration": {
"Type": 0,
"Url": "http://static.exapmle.com/user_upload/",
"Connection": {
"Path": "/var/www/example.com/user_upload/"
}
},
"Users": [{
"Login": "admin",
"Password": "admin",
"Administrator": true
}
]
}
В планах также реализация интеграции с хранилищем Amazon S3.
Хочу выразить благодарность gelas [2] за помощь в работе над проектом и здравую критику.
Отдельно хочу отметить, что проект создавался мною в рамках комьюнити украинских разработчиков .NET Core — .NET Core Ukrainian User Group [3]. На данный момент наибольшая активность участников наблюдается в группе в Facebook, но и группу в ВК мы также планируем наполнять. Если у вас есть вопросы по .NET Core, идеи которыми вы хотите поделиться, или вы только присматриваетесь к этой технологии – присоединяйтесь, будет интересно!
Проект доступен под лицензией MIT на GitHub [4].
Автор: Ernado
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-2/197583
Ссылки в тексте:
[1] ASP.NET Dynamic Data: https://habrahabr.ru/post/181804/
[2] gelas: https://habrahabr.ru/users/gelas/
[3] .NET Core Ukrainian User Group: http://dot-net.in.ua
[4] GitHub: https://github.com/dncuug/scaffolder
[5] Руководство по ASP.NET Dynamic Data.: http://appclub.im/archive/details/2396
[6] Википедия. Скаффолдинг.: https://uk.wikipedia.org/wiki/%D0%A1%D0%BA%D0%B0%D1%84%D1%84%D0%BE%D0%BB%D0%B4%D0%B8%D0%BD%D0%B3
[7] Источник: https://habrahabr.ru/post/311822/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.