Важливість шаблонів дизайну з Javascript, NodeJs та ін


36

Оскільки Javascript виявився всюдисущою мовою програмування в Інтернеті протягом наступних кількох років, нові рамки спливають кожні п’ять хвилин і програмування, кероване подіями, ведучими як сервер, так і клієнт:

Ви як розробник Javascript вважаєте традиційні шаблони дизайну важливими або менш важливими, ніж вони були для інших мов / середовищ ?.

Назвіть, будь ласка, три найкращі шаблони дизайну, які ви, як розробник Javascript, використовуєте регулярно та наведіть приклад того, як вони допомогли у вашій розробці Javascript.


5
Деякі люди стверджують, що модель дизайну (особливо GoF) є ознаками дефіциту мови (див. Цю дискусію ). Оскільки JavaScript є прототиповим і функціональним за своєю суттю, я б сказав, що інший набір шаблонів застосовний / корисний.

дуже зацікавлені у відповідях ... +1 за запитання :)
usoban

2
Книга " Шаблони JavaScript " Стояна Стефанова - це чудовий ресурс про багато моделей, які ви можете використовувати в JS. Багато з них існують спеціально для JS, а не для будь-якої іншої мови.
ІгорГанапольський

У Javascript є свої шаблони. Окрім книги, згаданої Ігорем, є ще й Шаблони дизайну JavaScript Addy Osmani , які безкоштовно.
user16764

Відповіді:


23

Ви як розробник Javascript вважаєте традиційні шаблони дизайну важливими або менш важливими, ніж вони були для інших мов / середовищ ?.

Класичні моделі дизайну не застосовуються до JavaScript.

Що стосується написання модульного та функціонального коду.

Ви повинні використовувати суміш конструкторів та функцій першого класу.

Як розробник JavaScript, я особисто намагаюся ставитись до JavaScript як до LISP, а не до Java. Тому спробуйте наслідувати монади та функціональний код стилю високого рівня, а не намагатися наслідувати класичний код OOP.

Назвіть, будь ласка, три найкращі шаблони дизайну, які ви, як розробник Javascript, використовуєте регулярно та наведіть приклад того, як вони допомогли у вашій розробці Javascript.

Знову ж таки, моделі дизайну насправді не так сильно застосовуються, але нижче три важливі конструкції.

  1. Використання закриттів
  2. Використання функцій першого класу
  3. Використання об'єктних заводів з або без 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.

Державний шаблон / шаблон стратегії:

Вам не потрібна схема стану. У вас є функції першого класу та динамічні типи. Просто введіть функції або змініть властивості на льоту.


Райнос, приємна відповідь. Щодо прикладів, я більше думав з концептуального рівня. Наприклад: "модель спостерігачів допомогла в ситуації ..."

@Lewis виберіть кілька моделей дизайну, які вам подобаються, і я спробую запропонувати більш відповідні функціональні альтернативи пізніше.
Райнос

Підхід та відповідь зусиль - це геніальний Райнос. Спасибі.
Льюїс

@Lewis Я спробував подивитися ще на пару, але я здивувався, оскільки всі вони розроблені під строгі класичні мови OO. якщо є інші конкретні моделі дизайну, ви хочете, щоб я дізнався, повідомте мені.
Райнос

Ви забули про шаблон прототипу - у ака- дурного JavaScript навіть немає нормального oop ;)
c69,

10

Прийміть цю відповідь як суб’єктивну думку.

Ви як розробник Javascript вважаєте традиційні шаблони дизайну важливими або менш важливими, ніж вони були для інших мов / середовищ?

Якщо ви маєте на увазі традиційні шаблони дизайну, такі як Gang of Four , то більшість методів є агностичними мовами / платформами на кшталт "Програма на інтерфейс, а не реалізація" або "Композиція вподобаного об'єкта над успадкуванням класів" і однаково важлива також для розробників JavaScript.

Більш конкретні зразки, такі як творчі, структурні та поведінкові, можуть або не потрібно використовувати так само або так часто, як в інших мовах, оскільки особливості мови можуть впливати на їхнє використання значною мірою. Тому деякі мови (включений JavaScript) мають власні шаблони дизайну, засновані на функціональності або синтаксичному цукрі, який вони пропонують.

Загалом, я б сказав, що традиційні моделі дизайну настільки ж важливі, як і в інших мовах, але конкретні шаблони JavaScript важливіші, ніж традиційні.

назвіть трійку найкращих моделей дизайну, які ви, як розробник Javascript, використовуєте регулярно та наведіть приклад того, як вони допомогли у вашій розробці Javascript

Серед основних моделей дизайну JavaScript я в основному використовую такі:

1. Шаблон конструктора (з прототипами)

Особливо на стороні сервера при написанні матеріалів node.js, оскільки він добре підходить для написання модулів, хоча йому не вистачає нативної інкапсуляції. Також це популярно для багатьох інших розробників, якщо ви переглядаєте сховища на GitHub, тому знайомство з цією схемою може допомогти вам краще зрозуміти інші коди.

2. Розкриття шаблону модуля

Пропонує модульність з інкапсуляцією.

3. Сухий візерунок

Це досить специфічний сценарій, хоча кожен розробник повинен використовувати його максимально (не).


Спасибі! Приємна відповідь і таку відповідь, на яку я сподівався. Хоча питання можна розглядати як суб'єктивне, хороша відповідь на кшталт цього говорить про те, що є відповідна відповідь. Дочекаємося більше відповідей перед тим, як "вийти".

2

Шаблони дизайну викладаються на уроках дизайну для CS. Вони не є істотними, але дуже корисні, якщо ви можете знайти аналогічні ситуації, щоб мати продумане рішення.

Це також дозволяє програмістам спілкуватися легше. Ви також можете поговорити зі своїм колегою щодо моделей. Якщо ви скажете тут, що я маю свого спостерігача, то він досить добре розуміє, що відбувається.

Люди, природно, придумують рішення, які самостійно впишуться в модель дизайну, але моделі дизайну допомагають визначити термінологію та стандартні ідеї, які можуть бути корисними.

У моделях немає нічого надзвичайного, найприємніше - це ідеї, які канонізуються та визначаються неодноразово корисними способами.


1

Ви як розробник Javascript вважаєте традиційні шаблони дизайну важливими або менш важливими

Вони життєво важливі.

Це тому, що концепції для багаторазових рішень можуть перевершити мову. - зміни синтаксису - зміни в реалізації - поняття для шаблону все ще існує.

Розробники з будь-якої мови можуть вивчати розширений JS за допомогою вивчення шаблонів, а не синтаксису. Ті, хто цього не знають, пропускають.

Назвіть, будь ласка, три найкращі шаблони дизайну, які ви, як розробник Javascript, регулярно використовуєте

Є шаблони, які часто використовуються, проти яких деякі "сперечаються". Однак їх добре знати, оскільки вони є надзвичайно поширеними та потужними у передових JS.

1- Простір імен - загортайте свій код в об’єкт.

var x = (функція () {}) ();

2- ObjectConfiguration, заводський зразок. -Pass об'єкт до функції, а не купу vars.

var product = фабрика ({});

3- Функція зворотного дзвінка. - Передати функцію як параметр, який повинен викликатися, коли завдання виконане.

функція longTask (function () {// зателефонуйте мені, коли закінчите});

Як я вже говорив, деякі можуть стверджувати, що це не зразки, але вони дуже поширені і дуже потужні, і їх слід згадати, оскільки вони справді дуже корисні для багаторазового використання солютони. Яке визначення Шаблону дизайну.

Відмінне запитання.

Сподіваюся, що це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.