Фреймворк Autodafe — работа с моделями

    Вышла версия 0.3 node.js фреймворка для разработки веб приложений Autodafe.

    У фреймворка появился сайт autodafe.ws, который стремительно обрастает документацией и статьями. (Документация на сайте генерируется автоматически из кода, задокументированного по правилам jsdoc. Поэтому если вы хотите быстро поднять сайт с документацией вашего проекта, можете спросить меня «как?».

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


    Для тех, кто еще не знает про фреймворк

    Возможности


    • Архитектура: MVC + подключаемые модули
    • Удобное перенаправление запросов пришедших по http и websockets
    • Человеко понятные УРЛ
    • Mysql ORM (ActiveRecord с поддержкой отношений)
    • Управление пользователями
      • Аутентификация и авторизация, сессии
      • Система управления правами ролей пользователей
    • Логирование в консоль, фс и на почту
    • Много других удобностей из коробки


    Читайте тут: autodafe.ws
    Качайте здесь: autodafe на github
    Следите там: @node_autodafe
    Спрашивайте сюда: jifeon@gmail.com
    Поделиться публикацией

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

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

      +1
      Мне очень ограниченной показалась работа с моделями. По сути, это тоненькие классы, которые делают кучу работы, но никакую из этих частей не делают полностью. Укажу, что бросилось в глаза:
      1) Нет геттеров/сеттеров
      2) Не можем создать пустой экземпляр
      3) Нет состояний модели (isNew, isDeleted, isModified)
      4) Нет понятия коллекции
      5) Нет связей между моделями
      6) Статические методы get_all или find_by_pk не должны реализовываться в самой модели
      7) Методы save/delete, насколько я понял, надо в каждой модели реализовывать самому.
      8) Модель должна сама уметь делать запросы к БД, а не пользоваться реализацией абстрактного DataProvider-а
      Писал в два часа ночи, если что-то не так понял — извините.
        0
        Спасибо за комментарий

        В статье описывается базовый класс для моделей. Для моделей, хранящихся в БД, есть специальный класс ActiveRecord, для которого несправедливы ваши пункты 3, 5, 7, 8 Для ActiveRecord статья еще готовится, поэтому примерно посмотреть что это можно только в неполной документации к нему

        По поводу геттеров сеттеров: для атрибутов можно легко их задать таким образом:
        model._.attr_name.get = function( descriptor ){}
        подробнее описано здесь AutodafePart._ А чаще всего атрибутам достаточно фильтров, которые записываются в их описании (об этом написано в статье)

        Понятия коллекций пока действительно нет.

        Поясните, пожалуйста, что мешает создать пустой экземпляр?
          0
          Если мы захотим отвязаться от АР нам придется отказаться от состояний (на самом деле, это именно состояния модели, никак не связанные с конкретной реализацией хранилища), нам придется описывать в абстрактной модели реализацию CRUD. И еще много чего — по ощущению, модели очень завязаны на АР, а хочется наоборот. Про пустой класс: хочется что-то вроде
          var u = new User();
          u.setName(«vasya»).setAge(14);
          if (smth) u.setLastname(«pupkin»);
          u.save();
          А не пихать хэш в конструктор, который будет не очень удобно собираться. Если хотите, могу показать реализацию М одного очень грамотного парня, которую мы сейчас используем. Но уже завтра.
            0
            Пожалуй Вы правы, из АР в модель надо вытащить некоторые вещи. Спасибо за свежий взгляд.

            Аналог на Autodafe про Ваш пустой класс:
            var u = new this.models.user;
            u.name = «Vasiliy»;
            u.age = 14;
            if (smth) u.lastname = «Pupkin»;
            u.save();

            Посмотреть модели грамотных парней всегда хорошо, так что конечно поделитесь, если можете.
              0
              github.com/maxmaximov/wader/blob/master/AModel.js
              Тут у него не самая свежая версия — чуть позже выйдут в паблик некоторые крутые штуки. Правда, этот фреймворк клиентский и отчасти завязан на jQuery (но не сильно критично, я именно о внутренностях), и вот там как раз используется DataProvider, реализующий CRUD-интерфейс и легко поддающийся смене хранилища данных и тестированию (легко подменить mock-экземпляром).
              И да, я всё-таки за сеттеры/геттеры, а не «сырые» свойства объекта — программисту видно интерфейс, который предоставляет объект, он заметит опечатку + в сеттеры можно сунуть превалидацию какую-то.
                0
                Спасибо за код.

                Там не просто свойства, а как раз гетткры и сеттеры, которые выглядят как задание свойств. Реализуются при помощи родного Object.defineProperty

                Задать сеттер на лету можно вот так:
                user._.name.set = function(value, descriptor){ descriptor.value = do_something_with( value ); }

                и использовать соответственно просто как свойство:
                user.name = 'Vasya';

                Ну или можно в самом классе переопределить метод set_attribute и задавать атрибуты вобще как душе угодно, при этом использоваться они все равно будут как свойства.
                  0
                  Ну у того проекта выше и преимущество и недостаток в том, что он может быть и клиентским (пока под сервер-сайд не затачивался, но сделать это будет просто), поэтому там не получается нативные геттеры/сеттеры использовать

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

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