Autodafé

    Autodafe — node.js фреймворк для разработки веб приложений

    Содержание статьи может описывать неактуальный код. У фреймворка уже давно свой сайт autodafe.ws

    Самые вкусные плюшки из коробки:


    • архитектура: MVC + подключаемые модули
    • Mysql ORM (ActiveRecord с поддержкой отношений, асинхронное подобие того, что предлагает Yii framework для PHP )
    • HTTP сервер
    • WebSockets ( обертка для socket.io )
    • удобное перенаправление запросов и человеко понятные УРЛ
    • управление пользователями
      • аутентификация и авторизация, сессии
      • система управления правами ролей пользователей
    • почта
    • логирование в консоль, фс и на почту
    • шаблонизатор

    Ложка дегтя:


    • очень малая часть задокументирована
    • задокументированная часть плохо задокументирована
    • плохо задокументированная часть задокументирована только на русском языке
    • тестами покрыт не весь фреймворк



    Hello world



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

    Шаг 1. Подготавливаем файловую структуру.



    Да, сейчас этот шаг не автоматизирован.

    Назовем директорию для проекта hello_world, что в ней должно быть для самого простого приложения:

    /hello_world
      /config          здесь будем хранить конфигурационные файлы
        /main.js       для начала хватит одного
      /controllers     сюда будем складывать контроллеры, определяющие логику нашего незаурядного приложения
        /site.js       единственный контроллер с единственным действием для единственной страницы
      /views           место для вьюшек
        /index.html    вьюшка главной страницы
      /index.js        входной скрипт
    


    Шаг 2. Устанавливаем Autodafe



    cd hello_world
    npm install autodafe
    


    Обычно всё проходит достаточно гладко )) ( тестировалось на fedora, mint )

    Шаг 3. Файл за файлом


    Входной скрипт index.js


    В нем мы просто подключаем конфигурационный файл, autodafe, а также создаем и запускаем приложение.

    var config   = require( './config/main' );
    var autodafe = require( 'autodafe' );
    
    autodafe.create_application( config ).run();
    


    Конфигурационный файл main.js



    module.exports = {
    
      // Название приложения ( пока что используется только для логирования )
      name : 'hello_world',
    
      // Корневая директория приложения, в ней по умолчанию ищутся директории с моделями, контроллерами, вьюшками,
      // компонентами, а также относительно нее задаются другие пути в конфигурационном файле
      base_dir : require('path').join( __dirname, '..' ),
    
      // Параметры приложения, которые доступны в любом месте приложения через функциию Application.get_param
      params : {
        your_name : 'Andrey' // имя которое мы будем выводить на нашей страничке
      },
    
      // Настройки компонента отвечающего за перенаправление запросов и генерацию запросов
      router : {
        rules   : {
          '/' : 'site.index'
        }
      },
    
      // Настройка подключаемых компонентов
      components : {
    
        // http сервер
        http        : {
          port : 3000
        }
      }
    };
    


    Контроллер site.js



     // наследуемся от Controller
    module.exports = Site.inherits( global.autodafe.Controller );
    
    /**
     * Единственный в данном приложении контроллер, который и отвечает за логику работы приложения 
     */
    function SiteController( params ) {
      this._init( params );
    }
    
    /**
     * Главная страница сайта. Этот метод указан в секции router.rules конфигурационного файла для корня сайта
     */
    SiteController.prototype.index = function ( response, request ) {
      // автоматически найдет представление index.html и отошлет его
      response.send({
        name : this.app.params['your_name' ]
      } );
    };
    


    И наконец наша вьюшка index.html


    Единственное на что в ней надо обратить внимание это параметр {name} переданный из контроллера. Для рендеринга autodafe использует dust
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
      <title>Autodafe hello world</title>
    </head>
    <body>
      <h1>Hello {name}!</h1>
    </body>
    </html>
    


    Запускаем


    node index.js
    

    и заходим на localhost:3000 в Вашем браузере

    Где узнать про фреймворк подробнее


    Сайт autodafe.ws
    Исходный код на github: autodafe, там есть 3 небольшие демки + в файле common_config.js можно посмотреть пример настройки приложение с максимальным использованием всех компонентов
    Приследуйте фреймворк в твиттере @node_autodafe

    Если желаете принять участие в разработке или любым способом помочь в развитии фреймворка — пишите в личку или на jifeon at gmail.com
    Поделиться публикацией

    Похожие публикации

    Комментарии 51

      +1
      параллели с Yii прослеживаются. Задумка удачная :)
        0
        Есть вполне удачный express. Моё мнение, что лучше бы сделали middleware для express/connect чего вам так не хватало, а судя по всему это «свой» роутер и «свой» шаблонизатор (свой в кавычках потому что уже есть похожие реализации на гитхабе). Это велосипед.
        +2
        Чем лучше/хуже Экспресса?
        И если это ваша разработка, то желаю всяческих успехов!
          +3
          К сожалению, сейчас я не могу сравнить аутодафе с экспрессом по одной простой причине — я не писал на экспрессе сложных приложений, и не имею представления есть ли в нём и как реализована работы с пользователями, базой и тд

          Думаю, что когда проблема с документацией аутодафе уйдет, сравнение обязательно появится.

          Да, фреймворк пишем я и мой брат. Спасибо.
            +1
            С братом всё в порядке?

            (Простите)
              +5
              Думаю нет, он такой же псих как и я.
            • НЛО прилетело и опубликовало эту надпись здесь
                0
                Уже устарел и не обновляется, а жаль, я по началу сам с него начинал.
            +4
            Это дело каждого, но в javascript-е принято переменные писать в стиле camelCase — это почти стандарт). А классы/конструкторы, как раз правильно — UpperCamelCase.
              –1
              Обычно это называется mixedCase и CamelCase
                –1
                MixedCase разве не тоже что и CamelCase?
                Я не точно написал переменные — lowerCamelCase, а классы/конструкторы — UpperCamelCase.
                  0
                  headlessCamel и ProudCamels. А вообще камекейз всегда с большой, миксед — с маленькой.
                +3
                Да, я знаю. Но где-то полтора года назад я перешел на именование переменных, свойств и методов с подчеркиванием, а для конструкторов оставил UpperCamelCase — мне стало легче читать свой код. А так кода много, я не могу пожертвовать удовольствием в разработке негласным стандартам.
                +1
                Третья ложка дегтя может некоторым показаться медом. Лично я в Yii пользуюсь DAO. AR немного тяжеловат для сложных запросов.
                  0
                  AR стоит на DAO :) так что можно без проблем использовать знакомые конструкции, учитывая лишь асинхронный стиль.
                  +1
                  Выглядит очень даже! Желаю успехов вам и вашему фреймворку!
                  Вопрос: можно ли прикрутить jade/haml?
                    0
                    Да, для этого нужно уналедоваться от Controller, заменить метод render, и использовать в качестве базового свой контроллер.
                    +1
                    А почему в блоге JavaScript а не Node.js?
                      +1
                      или в блоге PHP
                        +2
                        Причем тут PHP?
                          0
                          Просто тема без холивара, вот зачаток.
                            +3
                            PHP-шный переписанный на node или приближение. Потому что для человека привыкшего к express.js, и вообще js его код и примеры выглядят диковато. Они выглядят как будто они написаны на PHP.
                              +1
                              И как только Вы можете увидеть в конфиге приложения и одном классе php…

                              К php я имею очень мало отношения и последние 5 лет пишу приимущественно на js, поэтому как так получилось я не знаю :( С php фреймворк связывает только полностью переписанная с yii на асинхронный манер dao и ar, а также несколько принципов, которые мне показались логичными.
                                –1
                                Ну то, что для Hello World-а нужно писать класс уже символизирует. А так я посмотрел часть исходников и пример блога
                                  +1
                                  Просто иногда решения выглядящие хорошо для миниатюрного приложения не всегда также хороши для больших проектов.

                                  Пара десятков контроллеров наследующихся друг отдруга с кучей действий, больше сотни правил маршрутизации — обычное дело для среднего сайта, в одном месте это не опишешь так, чтобы можно было быстро редактировать. Поэтому аутодафе изначально предлагает масштабируемую архитектуру.
                                0
                                А это плохо? :) Вот глянул и понял, что переписать свои контроллеры на JS будет не сложно, вероятно то же с вьюхами. С моделями затык будет, наверное.
                                  0
                                  Пожалуй модели — это самое безобидное. Они собирают информацию о всех полях из базы при запуске, так что описать надо только отношения моделей с другими моделями и правила валидации.
                                    0
                                    Пожалуй модели — это самое безобидное. Они собирают информацию о всех полях из базы при запуске, так что описать надо только отношения моделей с другими моделями и правила валидации.

                                    (промахнулся ответом)
                                      0
                                      Лично у меня модели используют паттерны DataMapper и Repository (в планах ещё UnitOfWork). То есть ни экземпляр модели, ни её класс вообще не знают о том, где они хранятся и хранятся ли вообще — так называемые POPOs — Plain Old PHP Objects — независимые ни от чего, кроме друг друга классы — ни от чего не наследуются, ничего не имплементируют и не содержат ссылок на объекты типа Storage. О хранении знает только контроллер и то на уровне вызова методов Repository — ему отдано на откуп вся логика хранения — хоть в оперативке, хоть вконтакт на стену объекты сериализуй :) ). Удобно, как минимум, для (юнит)тестирования — при тестировании модели (бизнес-логики) вообще о хранении задумываться не надо, при тестировании контроллера нужные объекты модели создаются простым new в самом контроллере и лишь репозиторий мокаем/стабим.

                                      Не промахнулись, это у хабра глюки, отображал ещё минуту назад всё в одном «треде».
                              0
                              уже там — не знал о существовании блога и не поискал перед постом, каюсь…
                              –1
                              Achievement Unlocked: Собери модули и назови это фреймворком.

                              В русском языке, как и во многих других, пробелы не ставятся после открывающей и перед закрывающей скобками. В коде так же рекомендую придерживаться какого-нибудь style guide, к примеру: goo.gl/gYHf

                              Ну и фреймворков в ноде очень не хватает, я знаю лишь о 48-ми: goo.gl/kwTlP
                                0
                                Согласен, статья не раскрывает уникальные возможности аутодафе. Она предназначена познакомить с существованием фреймворка. Дальше интереснее.

                                Если подскажите в скольки из этих 48 фреймворков есть orm для mysql поддерживающая отношения, буду Вам крайне благодарен.

                                > Собери модули и назови это фреймворком
                                Да, мало фреймворков предостовляют готовый функционал для работы, чтобы не пришлось провести часы за выбором необходимых модулей, коих немало, как Вы упоменули. Аутодафе в каком-то роде делает выбор за тех, кому не хочется тратить свое время.

                                Спасибо, что рассказали про скобки — никогда не придавал этому значения и не знал этого. Про стайлгид — у фреймворка есть стиль кодирования, но он не описан, и наверно не соблюдается в абсолютно повсеместно. Возможно позже этому будет уделено отдельное внимание.
                                  0
                                  >Если подскажите в скольки из этих 48 фреймворков есть orm для mysql поддерживающая отношения, буду Вам крайне благодарен.

                                  Не подскажу; SQL не пользую, как и большинство нодовцев. Если у вас что-то отличное в положительную сторону от других решений, выпустите и продвигайте это отдельным модулем — будет проще и быстрее даст отклик.

                                  Фреймворк это другой уровень и другие требования. Для фреймворка желательна какая-никакая идея, чтобы пользователь представлял во что это может вырасти через год. Авторритет разработчика, потому что объективных критериев оценки и сравнения разных архитектур почти нет. И какие-нибудь гарантии стабильности, желательно звучное имя компании в спонсорах/авторах.

                                  И насчет выбора. Из вашей коллекции с моей совпадает лишь шаблонизатор dust. Прекрасный шаблонизатор, пожалуй, самый производительный из функциональных. Кстати сказать, его использует LinkedIn в своей мобильной платформе, так что на сегодня он используется в самом востребованном нодовском приложении.
                                  Однако, dust в последний раз обновлялся этим летом, хуже того, последний коммит от автора был этим летом. По нодовским меркам это очень давно и я волнуюсь за их судьбу. Было бы прекрасно, если бы люди имеющие столько энергии чтобы собирать фреймворки посвятили себя от части поддержке любимых библиотек. Вот вы даже пишите о том что даст у вас «расширен», почему бы эти «расширения» не отправить обратно в репозиторий даста? Или сделать форк и развивать отдельно.

                                  tl;dr
                                  Есть время/желание — поддерживайте имеющиеся модули и пишите недостающие, «фреймворки» из них сами потом соберутся, если модули будут стоящими.

                                0
                                Простите, а что символизирует название?
                                  –1
                                  Когда мне нужно было озаглавить файл с фреймворком, я спросил ближайшего ко мне человека красивое слово. Так что не пытайтесь провести аналогию с сожением на костре или вынесением какого-либо приговора.
                                    +1
                                    Просто один довольно известный капитан (не тот самый) говаривал: «как судно назовёшь, так оно и поплывёт». Хочется надеяться, что работа с фреймворком не даст повода воскликнуть: «так вот что они имели в виду, когда придумывали».

                                    Но вообще удачи в начинании! :)
                                      0
                                      Не надо только забывать, что этот известный капитан и на «беде» добрался первым, а также что и аутодафе во всех значения этого слово было достаточно популярным явлением.
                                      0
                                      Было бы нелишне придумать красивую легенду выбора названия.
                                      Людям нравятся красивые истории, пусть даже и не совсем правдивые.
                                    +1
                                    Меня всегда удивляло, зачем в такие фреймворки засовывают «управление пользователями», наверно чтоб потом люди бегали по интернетам спрашивая как это переопределить, чтоб использовать кастомную структуру базы и.т.д.

                                    Всё что нужно это mvc, раутинг, orm, нормальный view engine.
                                      0
                                      Управление пользователями включается только при подключении определенного модуля, и никоем образом не накладывает ограничение на структуру базы данных.

                                      Подробнее в этой статье: goo.gl/dTbgH ( статья в заготовке и может содержать неточности )
                                        0
                                        Управление пользователями частая задача и, как правило, довольно трудоемкая, особенно если нужна не только аутентификация, но и авторизация. Но к счастью, интерфейс этой задачи обычно простой и в нормальных фреймворках так или иначе предусмотрен. Другое дело, что не во всех фреймворках легко сменить реализацию этого интерфейса, особенно «на лету», выбирать её, скажем, в контроллере. Не все авторы, например, обычную аутентификацию с логином и паролем делают практически также как сторонними сервисами, чтоб одну на другую можно было поменять изменением одной строчки.
                                        +1
                                        Почему dust, а не сменный движок шаблонов, ибо я вот пользуюсь Jade.
                                          0
                                          Выше описано, что сменить dust на jade не является проблемой. Но я согласен с Вами этому пункту надо уделить большее значение.
                                          0
                                          Мне нравится сходство с yii и не нравится шаблонизатор dust.
                                          Надо как-то сделать чтобы не привязываться к шаблонизатору, но как это сделать я не знаю.
                                            0
                                            не знаю как другим, а мне кажется, что если вы хотите популяризировать свой фрейворк — сделайте десятой другой скринкастов под типовые задачи
                                              0
                                              Для начала надо наладить документацию. Спасибо за идею, создал фичу в трекере.
                                              +2
                                              «очень малая часть задокументирована» — всё, спасибо, не нужно. Фрейморки для того и пишутся, чтобы жизнь программиста была проще, а не сложнее.
                                                0
                                                Я с Вами согласен. В данный момент очень активно ведутся работы по написанию документации. Пост написан для привлечения возможных разработчиков.
                                                0
                                                Я не стану его использовать только из-за одного названия.
                                                  0
                                                  Почитайте википедию — про это слово. Раздел «распространенные заблуждения».
                                                  0
                                                  То что многое есть из коробки — это плюс. Желаю успехов в разработке.
                                                  Название проекта на французском не самый удачный вариант в айтишном англоязычном мире.

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

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