Ви як розробник 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.
Державний шаблон / шаблон стратегії:
Вам не потрібна схема стану. У вас є функції першого класу та динамічні типи. Просто введіть функції або змініть властивості на льоту.