Ви як розробник Javascript вважаєте традиційні шаблони дизайну важливими або менш важливими, ніж вони були для інших мов / середовищ ?.
Класичні моделі дизайну не застосовуються до JavaScript.
Що стосується написання модульного та функціонального коду.
Ви повинні використовувати суміш конструкторів та функцій першого класу.
Як розробник JavaScript, я особисто намагаюся ставитись до JavaScript як до LISP, а не до Java. Тому спробуйте наслідувати монади та функціональний код стилю високого рівня, а не намагатися наслідувати класичний код OOP.
Назвіть, будь ласка, три найкращі шаблони дизайну, які ви, як розробник 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()).
Це все потужне використання шаблону спостерігача. Але це не шаблон, який ви використовуєте. Це проста частина мови. Це просто код.
Шаблон пам’яті:
Це просто 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.
Державний шаблон / шаблон стратегії:
Вам не потрібна схема стану. У вас є функції першого класу та динамічні типи. Просто введіть функції або змініть властивості на льоту.