Считаете ли вы, как разработчик Javascript, традиционные шаблоны проектирования важными или менее важными, чем в других языках / средах?
Классические шаблоны проектирования не применимы к JavaScript.
Что применимо, так это написание модульного и функционального кода.
Вы должны использовать смесь конструкторов и функций первого класса.
Как разработчик JavaScript, я лично стремлюсь рассматривать JavaScript как LISP, а не как Java. Поэтому старайтесь эмулировать монады и высокоуровневый код функционального стиля, а не пытаться эмулировать классический ООП-код.
Назовите три верхних шаблона проектирования, которые вы, как разработчик Javascript, регулярно используете, и приведите пример того, как они помогли вам в разработке Javascript.
Опять же, шаблоны проектирования на самом деле не применяются так сильно, но ниже приведены три важных конструкции.
- Использование затворов
- Использование первоклассных функций
- Использование объектов фабрики с или без
new
Пожалуйста, оставьте некоторый контекст, для которого я могу показать примеры таких методов по сравнению с выполнением того же самого кода с использованием традиционных шаблонов проектирования.
Давайте рассмотрим некоторые классические шаблоны проектирования и способы их реализации в js, а также альтернативные шаблоны, более подходящие для самого js:
Шаблон наблюдателя:
В node.js
этом все просто events.EventEmitter
. В jQuery
этом $.fn.bind
&& $.fn.trigger
. В backbone
этом есть Backbone.Events.trigger
и Backbone.Events.bind
. Это очень распространенный шаблон, используемый в повседневном коде.
Я никогда не останавливаюсь и думаю: «Эй, я использую здесь схему наблюдателя!». Нет, это просто низкоуровневый способ передачи сообщений или способ каскадного изменения.
Например, в магистральной сети все виды MVC связываются с onchange
событием моделей, поэтому при изменении модели все изменения автоматически касаются представления. Да, это мощный шаблон, но его использование настолько распространено в программировании, управляемом событиями, что даже не подозревали, что используют его повсюду.
В WebSocket
протоколе мы .on
используем его для привязки к on("message", ...
событиям. Опять же, это очень часто, но это наблюдатель в потоке, а не классическая ООП while (byte b = Stream.ReadNextByte())
.
Все это мощное использование шаблона Observer. Но это не шаблон, который вы используете. Это простая часть языка. Это всего лишь код.
Памятная картина:
Это просто JSON. Это позволяет вам сериализовать состояние объекта, чтобы вы могли отменить действие.
function SomeObject() {
var internalState;
this.toJSON = function() {
return internalState;
}
this.set = function(data) {
internalState = data;
}
this.restore = function(json) {
internalState = JSON.parse(json);
}
}
var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);
В JavaScript мы изначально поддерживаем API для сувениров. Просто определите метод, вызываемый toJSON
для любого объекта. Когда вы вызываете, JSON.stringify
он будет внутренне вызывать .toJSON
ваш объект, чтобы получить реальные данные, которые вы хотите сериализовать в JSON.
Это позволяет вам тривиально делать снимки вашего кода.
Опять же, я не понимаю, это образец сувенира. Это просто с помощью инструмента сериализации, который является JSON.
Шаблон состояния / Шаблон стратегии:
Вам не нужен шаблон состояния. У вас есть функции первого класса и динамические типы. Просто введите функции или измените свойства на лету.