Я был в душе и думал о чем-то.
Отложенный/обещающий паттерн должен уменьшить callback hell, разрешив разработчику связать функции вызова, как упоминалось здесь:
Parse.User.logIn("user", "pass").then(function(user) {
return query.find();
}).then(function(results) {
return results[0].save({ key: value });
}).then(function(result) {
// the object was saved.
});
Сверху моей головы - исправьте меня, если я ошибаюсь - но похоже, что использование отложенного / promises - это простой способ нарушить Закон Деметры?
Закон Деметры гласит:
Метод объекта может вызывать только методы:
- Сам объект.
- Аргумент метода.
- Любой объект, созданный в рамках метода.
- Любые прямые свойства/поля объекта.
Каждая единица должна иметь только ограниченное знание других единиц: только единицы "тесно" связаны с текущим подразделением. Или: каждый блок должен поговорить со своими друзьями; Не разговаривайте с незнакомцами.
Любые комментарии относительно этого?
Обновление 1 декабря 2013 года:
Обобщенный вариант моего вопроса. Рамка Promise предназначена для упрощения асинхронного кодирования и избегает "callback hell ". Одна из самых полезных функций Promise заключается в том, что вы можете переадресовывать события, используя .then()
, как показано в моем примере выше.
Учитывая, что все коды/функции теперь используют Promise (как это делает Бенджамин Груэнбаум (автор ниже)), не откроет ли он его, чтобы сделать функции цепочного вызова очень легкими, перейдя .then().then().then()
и т.д.
Написание кода, который функции цепочки вызовов друг за другом (.then().then().then()
) должен быть примером текстовой книги о том, как нарушить Закон Деметры.
Отсюда мой вопрос; Равно ли продвигают/открывают рамки обещания/облегчают злоупотребление/нарушение Закона Деметры?