DVelum – платформа разработки на PHP + ExtJS4

    Хочу познакомить Вас с проектом, который позволит по-новому взглянуть на процесс разработки приложений с web-интерфейсом.
    Это не очередная cms или framework, это платформа разработки высокопроизводительных приложений, система управления данными.
    При создании были использованы нестандартные интересные подходы. Ничего сверх революционного, реализованы очевидные вещи, которых сильно не хватает во фреймворках и cms.

    Концепты системы начали прорабатываться с 2008 года, в 2011 году несколько различных по направлению проектов были объединены в DVelum.

    Поводом для создания проекта послужило обилие наработок, реализацию которых не удалось найти в открытых framework'ах. Эти решения прошли апробацию в тяжелых боевых условиях. После того, как нам удалось значительно упростить себе жизнь при разработке проектов и стало ясно, что подобный подход имеет право на жизнь, возникло желание поделиться наработками с сообществом.

    Проект распространяется по лицензии GNU GPL v3, находится в стадии бета-тестирования, текущая версия 0.8.4b.
    Сайт проекта dvelum.ru

    Кому может быть интересна платформа

    Всем, кто занимается веб-разработкой на PHP. Разработчикам различных систем с web-интерфейсами, начиная от сайтов и заканчивая CRM и ERP.
    Тем, кого не пугают такие слова как ООП, паттерны проектирования, MVC, ORM, ExtJs4, руководителям разработки и ведущим разработчикам проектов.
    Использование DVelum позволит уменьшить количество ошибок начинающих разработчиков и головную боль при ревью кода, особенно ExtJs-интерфейсов.
    Также избавит разработчиков от части рутины. Возможно Вы сможете подключить к сложному проекту менее опытных и квалифицированных специалистов, отдав им работу по набрасыванию компонент в визуальном интерфейсе.

    Задачи, которые решает платформа:

    • увеличение скорости разработки проектов;
    • визуализация инструментариев управления и разработки, их тесная связь со структурой выполняемого проекта;
    • облегчение жизни программиста, избавление от рутинных операций;
    • автоматизация разработки интерфейсов;
    • публикация изменений проекта, сборка пакетов обновления;
    • автоматизация построения отчетов;
    • организация версионного контроля данных;
    • мониторинг исходного кода production-системы на внешнее вмешательство;
    • увеличение производительности разрабатываемых систем.


    С подробным описанием платформы и особенностями технологичеких решений можно ознакомиться на официальном сайте в разделе документация, или задать вопрос в комментариях.

    Основные особенности


    IDE

    Одним из китов, на которых держится система, является встроенная мини IDE, позволяющая в визуальном режиме конструировать интерфейсы приложения. Основным ее преимуществом является глубокая интеграция в систему, что позволяет оперировать внутрисистемными понятиями, взаимодействовать с ORM и исходным кодом, также несложно расширить функциональность своими компонентами.



    ORM

    Платформа использует собственную легковесную ORM, более того, имеется визуальный интерфейс управления структурой данных, что значительно упрощает разработку. ORM способна сравнивать и синхронизировать структуру базы данных, опять же упрощая deploy базы данных. Реализована мультиязычность описания объектов. Также имеется интерактивная диаграмма зависимостей объектов.



    Может возникнуть вопрос — почему мы не стали использовать уже готовую ORM, например Doctrine, все дело в том, что мы стараемся обеспечить простоту структуры и переносимость. Нам требовались специфические возможности для максимальной интеграции со встроенной IDE. Для увеличения производительности фронтенда мы вынесли выборки данных в модели, запись происходит через ORM.

    Version Control

    Система контроля версий документов (в данном случае документами являются объекты ORM) позволяет реализовать различные проекты от сайта издательства, новостной ленты до системы документооборота. Основное достоинство — простота использования и интеграции (включается выставлением одной галочки, позволяет осуществлять предварительный просмотр).

    Media library

    Медиатека позволяет управлять мультимедиа содержимым, производить поиск, редактирование и нарезку изображений, создавать превью.



    Scaffolding

    Система по Вашему запросу может создать CRUD-интерфейс для объектов ORM, также возможно создание CRUD-интерфейса для объектов, находящихся под версионным контролем. Особенность в том, что кроме контроллеров создается проект IDE (визуального интерфейса), который потом легко доработать по своему усмотрению.
    Вызов генерации кода осуществляется средствами визуального интерфейса.

    Deployment

    В систему интегрирован визуальный интерфейс сборки пакетов обновлений для production-серверов. При помощи API локальная машина опрашивает сервер, получает карту файловой системы, сравнивает со своей как эталонной, после чего предлагает список файлов для обновления и удаления. Разработчик выбирает, какие файлы будет обновлять, по клику собирается zip-архив, который можно распаковать на production.
    Систему публикации можно использовать для мониторинга стороннего вмешательства в исходный код Вашего приложения. Не редкость появление исполняемого javascript и iframe в исходных кодах проекта, система определит список измененных файлов.

    Reports

    Визуальный конструктор отчетов позволяет строить выборки данных на основе зависимостей объектов ORM. Довольно сырой, но перспективный модуль.



    Pages

    Модуль управления структурой сайта для любителей CMS (любители фреймворков, могут использовать обычный роутинг контроллеров).



    Performance

    Платформа предлагает оптимизированное ядро для Ваших проектов, из которого мы постарались выжать максимум производительности.
    Мы очень серьезно подошли к вопросу производительности системы на этапе проектирования, поэтому нам удалось добиться колоссального отрыва от большинства других систем, при этом не потеряв в функциональности и удобстве.

    Чтобы правильно настроить систему на максимальную производительность, воспользуйтесь руководством “Установка и настройка”.

    Рассмотрим пример теста функциональности «Блог», которая уже стала неким «Hello world» для разработчиков. Авторы фреймворков часто представляют в качестве демо функциональность «Блог», которую мы и оценивали.



    Тестировалось обращение к главной странице блога, содержащего 10 записей.

    Мы проводили достаточно много тестов по сравнению DVelum с популярными CMS, думаю публиковать их тут нет особого смысла, потому как CMS в данном случае не может конкурировать в производительности.

    Конечно же только по тестам производительности нельзя судить о качестве системы в целом, по различным причинам разработчики не всегда уделяют столь пристальное внимание производительности, как уделяем мы. DooPHP (http://doophp.com/benchmark), был достойным ориентиром в плане возможной производительности, нам удалось его превзойти, это было похоже на занимательное соревнование. Leng Sheng Hong (автор DooPHP), привет тебе из России.

    Мы не гонимся за модными технологиями, наша задача не замысловата — сделать быстрый и удобный инструментарий для разработчиков. При необходимости Вы в состоянии внедрить новинки самостоятельно. Вы можете добавить полюбившиеся вам библиотеки, взяв их из любимых framework, например, с легкостью интегрируются библиотеки Zend Framework.

    Почему мы именно сейчас решили представить проект хабрасообществу, ведь он еще на стадии бета тестирования? Нам хотелось бы получить фидбэк перед созданием релиз-кандидата, Ваши отзывы, пожелания, предложения, конструктивная критика для нас очень важны.

    Надеемся, что проект окажется полезным, найдет отклик у аудитории и свою нишу.
    В сентябре постараемся выпустить первую стабильную версию, учесть пожелания и предложения.

    Спасибо, что дочитали статью.

    С удовольствием отвечу на вопросы и расскажу об особенностях реализации.

    UPD 1:

    Тест производительности «Hello World» (исходный код теста доступен в демо релизах RC2 и выше)

    Поделиться публикацией
    Комментарии 90
      0
      Заинтересовало. Нужно будет протестировать.
        +6
        Кинули камень в сторону Yii на графиках :D
          0
          Не в коем случае, у систем совершенно разное предназначение. Они вполне могут дополнять друг друга.
            +5
            Что то мне подсказывает что дял Yii был отключены APC, кэширование и включен режим отладки. Графики, они такие графики.

            Вот честно не верю что yii показал столь низкую производительность.
              0
              Всего скорее проблема в отсутствии APC, в место него при тестировании был установлен eaccelerator
          +10
          Судя по скринам — там целая ОС :)
            +4
            Решил протестировать при помощи ab свою главную страницу, проект на Yii(сейчас его дополнительно долбят порядка 7-8 конкурентных запросов, помимо моего ab). Железка почти как у вас(Intel® Core(TM) i7 CPU 950 @ 3.07GHz).
            Document Path:          /
            Document Length:        37527 bytes
            
            Concurrency Level:      10
            Time taken for tests:   30.000 seconds
            Complete requests:      10368
            Failed requests:        0
            Write errors:           0
            Total transferred:      392999040 bytes
            HTML transferred:       389079936 bytes
            Requests per second:    345.60 [#/sec] (mean)
            Time per request:       28.935 [ms] (mean)
            Time per request:       2.894 [ms] (mean, across all concurrent requests)
            Transfer rate:          12792.84 [Kbytes/sec] received
            

            Правда настроен он по другому (nginx, php-fpm, php-apc,percona5.5). Как то слишком сильно разнятся результаты.
              +1
              nginx и php-fpm дадут прирост. Мы тестировали демо пример «Блог», использовали apache 2.2. Чтобы убедиться в порядках необходимо протестировать обе платформы на одном и том же железе и настройках. Обращаю внимание, что запускать систему DVelum нужно с настройками production, подробное описание есть в документации Установка и настройка
                +13
                Вот в том и дело, что свою систему вы запускаете с настройками production, а с какими настройками запускали остальных конкурентов не указываете. Если не готовы выкладывать код с конфигами в посте, то вам бы стоило убрать раздел «Perfomance», как откровенный маркетинг.
                  0
                  У вас есть возможность самостоятельно в этом убедиться. Код примера «блог» доступен как в нашей системе, так и в yii. Это не маркетинг. Если разобраться в причинах такой разницы, то все встанет на свои места. Мы используем подготовленные пакеты кода, количество инструкций include и require минимально. Кроме этого мы кропотливо исправляли медленные места системы при помощи профилирования. Отдельно можно рассмотреть работу с использованием кэширования в memcached, там также есть чему удивиться. Многие подходы, которые мы использовали можно применить к представленным в тесте фреймворкам, тем самым ускорив их, собственно для чего и предназначена платформа.
                    +4
                    В таком случае вам определенно стоит выложить использованный код и конфиги для всех обруганных фреймворков, чтобы можно было увидеть как именно вы применяли memcached Yii в частности и в остальных фреймворках в целом, подключали ли yii.php или yiilite.php. Хотелось бы буквально запустить у себя и проверить ваши графики.
                      0
                      Использовался yii.php, memcached не был подключен.
                        +11
                        Спасибо, больше у меня к вам вопросов нет.
                          +4
                          >Отдельно можно рассмотреть работу с использованием кэширования в memcached, там также есть >чему удивиться

                          >Использовался yii.php, memcached не был подключен.

                          Удивится тому что включено кэширование ?=) Революционно!!!
                            0
                            Читайте внимательнее.
                  +3
                  Я не думаю что nginx даёт большой прирост, т.к. ab тянет исключительно 1 файл, если бы тянул в перемешку с гифками по полкилобайта, то да, в этих ситуациях апач ведёт себя не очень корректно и то я не думаю что он может забить за 30 секунд 8 гигов памяти.

                  Я склоняюсь к тому, что на стороне Yii была какая то блокировка(файловая), иначе не возможно объяснить столь низкий результат.
                    0
                    Интересует способ тестирования, да и судя по тому что используется memcache для dvelum, то разница очевидна. Никто не мешает его так же применить и в демоблоге. И тогда уже сравнить результаты.
                      0
                      Нет в случае теста все честно memcached не использовался, вот тесты с memcached:

                      image
                      0
                      Возможно так и было, мы использовали то, что было предложено разработчиками as is, ничего не трогая.
                        +5
                        При должном конфигурировании и правках в демоблоге, yii может показать примерно такие же результаты:
                        1) активировать мемкэш в конфиге проекта
                        2) включить кэширование метаданных бд
                        3) подключить фильтр кэширования(COutputCache) в базовый контроллер
                        4) перевести сессии на более быстрое хранилище.
                        + у меня локально по осчущениям скорость работы того же демоблога осчутимо быстрее. В чем подвох? Я любитель yii и поэтому думаю что необходим тюнинг демоблога перед тестированием, чтоб проекты проверялись в равных условиях.
                0
                Насколько пригодна для создания приложений со сложной бизнес-логикой, где особо нет структурированных статических страниц, а есть пара десятков контроллеров (модулей?), которые управляют отчётами и формами напрямую на БД не проецирующимися, но активно с ней взаимодействующими? Вычисляемые поля как в базе на основе формы, так и наоборот, сериализованные массивы объектов и прочие подобные извращения?
                  –1
                  На основе подобного подхода приходилось выполнять очень сложную систему гос. документооборота, работа над ней как раз и подвела к созданию IDE
                    0
                    А где бизнес-логика хранится? Как реализовали бы задачу типа такой: пользователь заходит в хранилище своих чисел и видит для каждого разложение на простые множители, также может занести множители в форму и их произведение сохранится в базе. То есть в базе хранится произведение, а выводятся и вводятся множители (считаем, что задача разложения решаема за приемлемое время).
                    –1
                    Для этого как ни кстати подошел Extjs, взявший на себя отрисовку интерфейса, что позволило отвлечься от шаблонов и заняться непосредственно бизнес логикой.
                    +3
                    Поставил минус.

                    Тексты какие-то у вас очень мутные.
                    Почему вы взяли Yii и Fat Free?
                    Почему только их?

                    >DVelum с популярными CMS
                    Может это станет для вас неожиданностью но Yii это вообще-то не CMS.

                    выложите архив того что вы тестировалии, тогда можно будет более менее о чем-то говорить.
                      +1
                      По сравнению с CMS так же тестировали, но это разная весовая категория
                      image
                        +1
                        Взяты самые быстрые на наш взгляд фреймворки, Zend был бы незаметен на графике.
                        +2
                        Я когда-то очень активно писал под ExtJS, версии 2 и 3, а 4 реально ниасилил, перешел на Bootstrap, иногда только «дерева» не хватает.

                        Меня взбесила в ExtJS 4 какая-то идея MVC + MVC, причем второй уровень внутри JS

                        Может быть как раз таким фреймворком его и удобно использовать, но по моему это все уже слишком сложно
                          +2
                          А почему на вашем сайте совсем нет демо ни в каком виде, только картинки? (или я не нашел?)
                            +6
                            Давно не писал на php, там реально в стайлгайдах учат делать отступы вот так?

                                public function upload(array $data, $path)
                            	{
                            	          if($data['error'])
                            	              return false;
                            
                            	         $result = array(
                            	             'name'=>'',
                            	             'path'=>'',
                            	             'size'=>'',
                            	             'type'=>''
                            	         );
                            	         
                            	         $name = str_replace(' ','_' , $data['name']);
                            	         $name =  preg_replace("/[^A-Za-z0-9_\-\.]/i",'',$name);
                            	    
                            	        $ext = File::getExt($name);
                            	        
                            	        if(!in_array($ext , $this->_config['extensions'])){  
                            	            return false;
                            	        }
                            
                            
                              –2
                              У PHP толком нет «ванильного» стайл-гайда, есть стайл-гайд как писать код на Си самого PHP, но нет как писать код на PHP.
                              +2
                                +1
                                Но они «неофициальные». Это стандарты PHP Framework Interop Group.
                                  0
                                  Именно. Частная инициатива.
                              0
                              Для работы из под папки вообще никак не предназначен?
                                0
                                К сожалению нет, не предусмотрено. Это связано с особенностями конструктора интерфейсов.
                                0
                                Очень впечатляет.
                                Есть какая-то синхронизация моделей фронта с беком? Т.е. для свойств (полей таблицы БД), связей «один ко многим» и т.п. единое место конфигурирования или отдельно?
                                  0
                                  Единое.
                                  +1
                                  Для меня ExtJS и «производительность» — полярные понятия. Всё, что я видел в жизни, реализованное на ExtJS — безбожно тормозило, любой интерфейс, любая страничка.

                                  > «Задачи, которые решает платформа:
                                  >…
                                  > увеличение производительности разрабатываемых систем.»

                                  По сравнению с чем? Что с чем сравниваем?
                                  Сферический конь в вакууме?
                                  Не поверю, что наличие ExtJS увеличивает производительность по сравнению с plain-PHP кодом, например.
                                    +2
                                    В ExtJS все масса фич для улучшения производительности. Например, сборка в файл и загрузка только нужных компонентов, фреймворка, а не полная загрузка; AJAX-гриды для представления большого количества данных; ленивый рендиринг вьюшек; etc. Другое дело, что не все ими пользуются.
                                      +1
                                      А, ну то есть сравниваем лениво отрендеренную голую страницу с ExtJS и полностью отрендеренную на PHP? А что в лениво отрендеренную будет сваливаться 50 AJAX'ов ещё минуту — это мелочи.
                                        0
                                        Я не про сравнение, а про:
                                        > Всё, что я видел в жизни, реализованное на ExtJS — безбожно тормозило
                                      0
                                      Целиком и полностью поддерживаю!
                                      ExtJS сам по себе безбожно тормозит. Спору нет: красиво, наглядно, удобно, но очень-очень медленно.
                                        +2
                                        Если Вам не сложно, напишите примеры торможных решений на ExtJs. Сам его использую и хочется понять, что для Вас означает «безбожно тормозить».
                                        +1
                                        Можно узнать, какие вы видели примеры? Серьезно, очень хотелось бы посмотреть на некоторые рабочие примеры использования ExtJs (мы сами используем). Хочется понять, что для Вас означает «безбожно тормозить».
                                          +3
                                          Не поверю, что наличие ExtJS увеличивает производительность по сравнению с plain-PHP кодом

                                          Ничего, что ExtJS — это клиент-сайд, а PHP — сервер-сайд? Как их можно сравнивать?
                                            0
                                            По суммарному времени с момента инициации действия пользователем и до получения им результата.
                                              0
                                              При том же представлении результата и той же реакции на действия пользователя? То есть при том же UI?
                                                0
                                                При том же сценарии использования.
                                                  0
                                                  Вы о компромиссе между отзывчивостью и красотой/удобством/скоростью разработки? Насколько я понимаю тут никто не запрещает «ручками» реализовывать интерфейсы в стиле HTML 2.0, просто есть инструменты для (полу)автоматической генерации интерфейсов на ExtJS.
                                                    0
                                                    Нет, я просто рассказал, как считать производительность.
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            0
                                            И как там у Magento успехи? Давно не читал их исходники.
                                              –1
                                              Подчёркивания в именах свойств — Ваш код застрял в PHP 4.

                                              Из упомянутого выше PSR-1: «This guide intentionally avoids any recommendation regarding the use of $StudlyCaps, $camelCase, or $under_score property names.» Я лично предпочитаю $under_score.
                                                +1
                                                Видимо, EugeneOZ имел в виду вот это:
                                                Property names SHOULD NOT be prefixed with a single underscore to indicate protected or private visibility.
                                                  0
                                                  А-а-а, может быть.
                                              0
                                              Можете показать пример сравнения двух версий «объекта ORM»?
                                                0
                                                Хороший вопрос. На данный момент у нас нет реализованного функционала под это задачу, но в целом она решаема
                                                               /*
                                                                * предположим, что сравниваем объект "news" c известным нам id,  
                                                                * знаем, что последняя версия 10
                                                                * Вариант 1 Сравнение объекта и его версии
                                                                */
                                                		$vcModel = Model::factory('vc');
                                                		
                                                		$object = new Db_Object('news', $id);	
                                                		$dataBefore = $vcModel->getData('news', $id , 10);
                                                		/*
                                                		 * Нельзя задавать id напрямую
                                                		 */
                                                		unset($dataBefore['id']);
                                                
                                                		$object->setValues($dataBefore);		
                                                
                                                		var_dump($object->getUpdates());
                                                		
                                                	       /*
                                                                * Вариант 2 Сравнение 2ух версий объекта
                                                                */
                                                		$dataBefore = $vcModel->getData('news', $id , 9);
                                                		$data = $vcModel->getData('news', $id , 10);
                                                		$diff = array(); 
                                                		foreach ($data as $k=>$v){
                                                			if(!isset($dataBefore[$k]) || $dataBefore[$k]!==$v)
                                                				$diff[] = $k;
                                                		}
                                                		var_dump($diff);
                                                

                                                Функционал сравнения добавим в следующую версию, спасибо за отзыв
                                                  0
                                                  небольшая ошибочка, предположим что последняя версия 11
                                                    0
                                                    Про слияние, видимо, даже спрашивать не стоит.

                                                    А как вы разрешаете конфликты?
                                                      0
                                                      Это версионный контроль данных, какие слияния конфликты вы имеете в виду? Смысл в том, что была некая запись пользователь А внес в нее изменения пользователь B посмотрел какие данные изменил пользователь A.
                                                      Если вы имеете в виду функционал блокировки одновременных изменений, на данном этапе он не предусмотрен. Кто последний сохранил тот и прав. Добавить функциональность блокировок вполне реально.
                                                        +2
                                                        Это версионный контроль данных, какие слияния конфликты вы имеете в виду?

                                                        Типичные конфликты класса «пользователи одновременно меняют данные».

                                                        Мне просто чем дальше, тем больше кажется, что у вас не «версионный контроль данных», а история изменений. Все-таки, 12-ый год на дворе, VCS уже большие.
                                                          –1
                                                          Будем исправляться.
                                                            0
                                                            Скажите, а что вам мешало взять существующие VCS?
                                                              0
                                                              Не доводилось иметь дело сторонними VCS на уровне данных MySQL. Приведите пример такой системы php + mysql, которая бы управляла версиями данных MySQL. Думаю, не мне одному будет полезно изучить это направление.
                                                                0
                                                                Не доводилось иметь дело сторонними VCS на уровне данных MySQL.

                                                                Не понимаю, о чем вы.

                                                                Любая vcs (в том числе и ваша) управляет неким контентом, чаще всего — выраженным в файлах. Соответственно, ваши «версии данных» — это, на самом деле, тоже некоторый файл (и скорее всего, даже текстовый). Собственно, этот файл и кладется в VCS.

                                                                Это весьма типичное решение для управления версиями БД, в частности, по схожей технологии работает Database Project в Visual Studio.
                                                                  +1
                                                                  Мне кажется мы с вами запутались. Мы говорим о миграции структуры или о версиях данных в БД.
                                                                  Миграция структуры предусмотрена.
                                                                  Вы предлагаете сохранять запись из бд в файловую систему?
                                                                    0
                                                                    Так, стоп. Видимо, это я вас неправильно понял.

                                                                    У вас что версионируется, данные в продуктиве, или результаты разработки?
                                                                      0
                                                                      Ну вот вроде бы и разобрались, мы говорили о разных вещах.
                                                                      Под версионyым контролем объектов подразумевались непосредственно данные объектов. Их структура лежит и контролируется отдельно, при помощи выбранyой вами VCS
                                                                      0
                                                                      Вроде про миграцию структуры не упомянуто нигде или я пропустил?
                                                                      0
                                                                      Как я понял данная «VCS» реализована не на файлах, а на БД, просто дополняется схема для хранения истории некоторых полей.

                                                                      Речь не идёт о версионировании схемы, миграциях и т. п., только о данных полей.
                                                                        0
                                                                        Есть механизм синхронизации структуры базы данных, который сверяет конфигурацию и реальную структуру БД, способен обновить структуру базы данных, записать лог SQL запросов. Описание структуры хранится в файлах конфигурации, которые в свою очередь в VCS. Как это связано с одновременной записью данных 2 пользователями мне не совсем понятно.
                                                                          +1
                                                                          Все, я вас неправильно понял. Из текста создается ощущение, что у вас есть свой собственный контроль версий разработки.
                                                                            0
                                                                            Нет контроля версий разработки нет, он отдается на откуп разработчику. Единственное, что есть — дополнительный лог операций изменения структуры базы данных.
                                                                              0
                                                                              Просто лог? Откатиться «одним кликом» нельзя?
                                                                                0
                                                                                Откатиться можно следующим образом — откатить файлы конфигурации объектов ORM в своей VCS, в интерфейса запустить синхронизацию структуры. Так же можно воспользоваться бекапом, который можно сделать в интерфейсе управления ORM
                                                                            0
                                                                            Есть проблема контроля версий схемы при разработке приложения с SQL СУБД, а есть проблема контроля версий данных при работе такого приложения. Вы, как я понял, попытались решить обе?
                                                                              0
                                                                              Да, пытаемся. При этом используем не связанные между собой функциональности.
                                                          0
                                                          Скачал, просмотрел внутри и снаружи. Очень интересная система. Вот только бы по больше видео о том как использовать систему.
                                                            0
                                                            Мы работаем над этим, недавно выпустили первый скринкаст. Документации будет много, на ее написание и перевод необходимо время. Попутно дорабатываем систему с учетом пожеланий и предложений. Например снизили обилие singletone доставшихся по наследству, продумываем локи на одновременное редактирование записей.
                                                              0
                                                              >>продумываем локи на одновременное редактирование записей
                                                              Кстати, так ли необходимо если использовать транзакции? Ну т.е. если кто-то уже редактирует запись, то вы будете выводить какое-то сообщение, что данные устарели или другой пользователь их редактирует?
                                                                0
                                                                Сейчас рассматриваем вариант:
                                                                При открытии на редактирование вторым пользователем предупреждать, что запись уже редактируется, возможно некую функцию перехвата лока. Да, при сохранении предупреждать, если запись была изменена кем-то другим, система позволяет определить исходную версию редактируемой записи и были ли изменения другим пользователем.

                                                                Остается вопрос на сколько это необходимо конечным пользователям, и не усложнит ли это работу с системой. В комментариях к статье промелькнуло, что нужно, правда в рамках обсуждения другого вопроса.
                                                            0
                                                            Выпустили RC1 0.8.6 Первый кандидат на стабильную версию.
                                                              0
                                                              Выпустили версию 0.8.8

                                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                              Самое читаемое