• В чем разница императивного и декларативного подхода в javascript? Это процедурный и ООП стили?

    @pikkvile
    developer
    Моё понимание такое.
    Декларативное программирование - это когда в коде описано что должно получиться, а императивное - когда написано как это сделать. Т.е. в первом случае мы совершенно не интересуемся, каким именно образом машина сделает работу, какие инструкции в каком порядке выполнятся и так далее, мы просто объясняем ей, что хотим увидеть в результате. Примеры декларативных языков - html, css, sql, конфиг nginx. Ещё тут стоит упомянуть функциональные языки (lisp, haskell), программы на них тоже, как правило, являются описанием (декларацией) того "что должно получиться". Ну, короче говоря, мы говорим компьютеру: вот смотри, мне надо чтобы было так, а как ты это сделаешь, мне не интересно. Аналогия такая: у меня есть чертёж бани, я даю его бригаде строителей и уезжаю. Как именно они там будут таскать брёвна, пилить доски и прочее - я не в курсе.
    Программируя императивно, мы описываем конкретные шаги, действия и точный порядок, в котором их нужно исполнять. Напрямую руководим процессом, непосредственно отдаём приказания. Примеров масса, большинство популярных языков императивны, в том числе и javascript. Ты пишешь: вот, сделай-ка переменную myVar, потом запиши туда число 5, повторяй это до тех пор, пока что-то не случится... и так далее. Возвращаясь к примеру с баней, ты теперь - начальник бригады, именно говоришь какое бревно куда класть.
    Что касается процедурного и объектно ориентированного стилей, это немного о другом. Я бы сказал, что это два разных способа писать императивные программы. В процедурном случае мы организуем код, наши команды (приказы машине) в виде процедур. Процедура - набор команд. Это довольно простой способ организации кода и исторически более ранний. ООП - это чуть более сложный подход к организации кода, когда мы группируем инструкции и данные, которыми они манипулируют, вместе. Объект - это состояние (данные) плюс поведение (набор методов). Но это уже немного другая история.
    Ответ написан
    2 комментария
  • У кого нибудь возникало ошибка TypeError: Illegal invocation?

    @lega
    Эта ошибка возникает когда идёт вызов ф-ии без указания правильного this, например ф-ия из scope без самого scope, log без console, alert без window и т.п.

    Какая версия ангуляра?
    Ответ написан
  • С чего начинать проектировать приложение?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Предположим, что с будущей функциональностью Вы определились. Тогда Вы точно знаете, кто или что будет поставлять данные, и кто/что будет их потреблять.

    Теперь выясните, кто будет обращаться к вашей системе, чтобы передать или забрать данные, а к чему будет обращаться Ваша программа. Те системы или пользователи, которые обращаются к программе сами, нарисуйте схематически на листе бумаги вверху. Те, к которым будет обращаться программа (включая БД), - снизу.

    Теперь нарисуйте под каждым нарисованным сверху субъектом прямоугольник с названием UI или API - это интерфейсы, к которым будет обращаться пользователь или внешняя управляющая система. Иногда UI тоже может обращаться к API. Объедините все прямоугольники с UI одним контуром и обзовите слоем UI. Объедините все прямоугольники с API и обзовите слоем сервисов.

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

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

    Теперь справа нарисуйте несколько длинных прямоугольников снизу доверху и написшите в них: логирование, конфигурация, мониторинг производительности, обработка исключений и что-то ещё, что является общей инфраструктурой (или сквозной функциональностью) для всех слоёв вашей программы.

    Получите логическую архитектуру. Разбросайте слои по серверам - получите физическую архитектуру.

    А дальше - детально прорабатывайте каждый маленький квадратик. Всё.
    Ответ написан
    2 комментария