Страницы

Поиск по вопросам

понедельник, 13 мая 2019 г.

Не понятен паттерн конструктора

В примерах по AngularJS, которые используют сервисы всегда демонстрируют такой паттерн:
module.factory('myFactory', function($log) { var myFactory = { this.getLog = function () { console.log('Bla bla bla') } }; return myFactory; });
Не могу понять почему не сделать вот так:
module.factory('myFactory', function($log) { return { this.getLog = function () { console.log('Bla bla bla') } }; });
Зачем нужен этот бесполезный var myFactory?


Ответ

Это скорее всего дело стилистики: возвращать что-либо как есть либо через промежуточную переменную. Использование промежуточной переменной потенциально делает код гибче на случай добавления функционала и дружелюбным к отладке, когда точку остановки можно будет поставить сразу после переменной. На мой взгляд переменными оперировать удобнее, чем анонимными объектами или результатами вызовов. В данном случае, если например фабрику нужно будет расширить миксинами или пронаследовать от другого объекта, то удобнее это будет сделать с использованием переменной. Хочу поделиться еще одним вариантом, который описывается в Angular Style Guide
module.factory('myFactory', function($log) {
var myFactory = { foo: foo, bar: bar };
return myFactory; ////////
function foo() { console.log('foo'); }
function bar() { console.log('bar'); } }
Плюс в том, что размещение публичного интерфейса сверху делает код фабрики читаемее и позволяет сразу увидеть все, с чем она позволяет работать + сразу видно то, что нужно покрывать тестами. Это особенно полезно тогда, когда код фабрики разрастается и приходится скроллить, чтобы понять, что вообще в ней есть. Применим этот подход не только к фабрике, но и контроллерам, директивам и т.д.

Комментариев нет:

Отправить комментарий