Разработка OblakanRM


Опубликовано 16 октября, 2013

Итак, напишу сумбурную заметку. Я занимаюсь разработкой общественной карты проблем для своего города. И 1 ноября будет первый публичный, тестовый релиз, который можно будет потыркать.

К сожалению, разработка слегка затянулась из-за применения новых технологий, с которыми мне хотелось поиграться. Но оно того стоит! Вообще, я планирую выступить с докладом на предстоящей местной IT-конференции в котором опишу как и на чём работает мой проект. Но некоторые вещи можно рассказать и сейчас.

Мой проект работает на Ruby on Rails 4 и Ember. На последней технологии я и заострю ваше внимание, так как именно с ней я в последние недели занимаюсь горячим, буйным.. исследованием.

Ember — это js-фреймворк для разработки веб-приложений. По сути, это означает, что весь клиентский интерфейс строится на js, а общение с сервером ограничивается передачей данных моделей, например, в формате json через API. А это значит, что можно таким же образом добавить мобильные клиенты, не делая дополнительных усилий для организации коммуникации с сервером.

          # GET /api/reports
          {"reports": [    
              {
                  "id": 4,
                  "title": "1",
                  "description": "1",
                  "address": null,
                  "longitude": 91.43,
                  "latitude": 53.717,
                  "user_id": null,
                  "created_at": "2013-10-15T00:51:24.226+08:00",
                  "updated_at": "2013-10-15T00:51:25.446+08:00",
                  "url": "http://localhost:3000/api/reports/4"
              }
          ]}

Этот фреймворк позволяет добиться плавного, отзывчивого, динамичного интерфейса, минимизируя усилия по поддержанию кода. К примеру, этот код добавляет комментарий:

          # controllers/comments_controller.js.coffee
          OblakanRM.CommentsController = Ember.ArrayController.extend
            actions:
              comment_submit: ->
                comment_hash = {
          	...
                }
                comment = @get('store').createRecord('comment', comment_hash)
                comment.save().then =>        
                  @pushObject(comment)
                , (reason) ->
                  toastr.error(reason, 'Возникла ошибка при добавлении комментария')

Одной командой @pushObject(comment), комментарий автоматически добавляется в список и обновляются все счётчики, связанные с комментариями.

Мне очень нравится концепция Ember, хотя им предстоит ещё много работы. Фреймворк активно развивается и порой очень радикально. Многие примеры кода на stackoverflow тупо устарели, хотя они могут быть датированы парой месяцев назад. А документации фреймворку явно не хватает для работы.