2015-09-09 8 views
3

Два популярных моделей для конфигурации в JavaScript является строителем шаблона и варианты объект картины:Javascript Builder шаблона против Параметров объекта для контакта импортера

Builder

var importer = new LeadImporter() 
    .assignLeads(true) 
    .source("source") 
    .organization(organization) 
    .setLeads(leads) 

importer.processP().then(function() { 
    ... 
}) 

Параметры объект

var importer = new LeadImporter({ 
    assignLeads: true, 
    source: "source", 
    organization: organization 
}) 

importer.processP(leads).then(function() { 
    ... 
}) 

Есть ли рекомендации по наилучшей практике, которые определяют, какой шаблон принять? Является ли один образец более результативным, чем другой? При каких обстоятельствах одна модель должна быть принята над другой?

+1

Действительно? Я думаю, что это хороший вопрос. Не так много информации о том, когда выбрать любой шаблон. –

+1

Я не верю, что когда-либо видел шаблон строителя в JavaScript. FWIW, ответ __Java__ на боковой панели довольно понятен, когда использовать каждый (и был также закрыт.) – Mathletics

+1

Меня не интересует, почему для Java конкретный шаблон имеет смысл. Меня интересует подход JavaScript-программиста к этому. Javscript не требует безопасности потоков, и я не сравниваю его с шаблоном Factory. Оба подхода очень распространены. –

ответ

1

Просто примечание стороны о вашем строителем примере шаблона:

Ваш пример не очень вписывается в шаблон строитель: «строитель» А должен иметь функцию build() (иногда называемый get() или construct()), которая возвращает новый объект целевого класса.

В вашем примере сам экземпляр, как представляется, предоставляет функции построителя (source("source") и т. Д.). Это имеет много недостатков: объект может находиться в произвольном состоянии во время выполнения, и вам нужно приложить много усилий для проверки состояния объекта, когда другая часть программы вызывает функцию этого экземпляра. Кроме того, это нарушает открытый API вашего класса, смешивая функции экземпляра и построителя. Это делает отладку сложнее, а ваш код менее читабельным.

Если у вас есть класс LeadImporter, вы можете создать LeadImporterBuilder, который обеспечивает функции на самом деле построить экземпляр LeadImporter (именно поэтому мы называем его сборки эр рисунок). Следовательно, необходимо создать LeadImporter

В современном JavaScript варианты объектов гораздо более популярны. В JAVA шаблон построителя велик, но JavaScript достаточно динамичен, чтобы не приводить в действие такую ​​многословие. На самом деле, я могу запомнить очень мало фактических применений шаблона построителя в JavaScript.

В JAVA шаблон строителя очень распространен и отличная идея. Если вам нужно настроить многие свойства экземпляра, это намного лучше, чем вызывать конструктор с большим количеством неименованных параметров. Это также более гибко, предоставляя возможность использовать несколько аргументов varargs в разных методах построения. Кроме того, значения могут быть окончательными в экземпляре полученного класса. Другим преимуществом является то, что некоторые параметры могут быть необязательными, и гораздо удобнее не вызывать соответствующие функции builder вместо передачи null конструктору самого класса или созданию нескольких конструкторов в зависимости от аргументов, которые вы, возможно, захотите передать.

Давайте посмотрим на эти четыре аргумента в JavaScript и альтернативные варианты объекта:

  1. Там нет безымянных параметров. В объекте options каждый параметр получает имя. Вместо .source("abc") вы можете просто использовать source: "abc".
  2. Varargs в JavaScript - это нечто совершенно простое. Но они необязательны для объекта options, потому что вы можете просто передать массив внутри объекта options. Используйте files: [ 'a', 'b', 'c' ] вместо files('a', 'b', 'c').
  3. Вы все еще можете сделать объекты «final» с объектом options, просто настройте их, чтобы они не были доступны для записи. Однако понятие «конечных полей» не существует в JavaScript. Не имеет значения, все же можно создать неизменяемые объекты, даже используя объект options.
  4. Простой: вместо того, чтобы не вызывать функцию, не передавайте опцию через объект options.

На мой взгляд, модель строитель нет преимуществ перед вариантов не приемлю - по крайней мере, в современном JavaScript.

 Смежные вопросы

  • Нет связанных вопросов^_^