
#код Создание chainable класса
Если вам было интересно, как получается, что при использовании mongoose или typeorm мы строим наши запросы методом chain функций друг за другом, то этот пост для вас.
Это архитектурное решение удобно тем, что мы не открываем для внешнего пользователя внутреннее устройство нашего класса, а ограничиваем его методами, которые позволяют сконструировать какой-то объект. Часто это очень удобно использовать в контрактах между микросервисами, когда мы хотим создать объект для запроса, при этом сделать это наиболее простым способом, особенно если внутри результат будет содержать кучу вложенных объектов, которые можно создать на основе функций.
В примере на скриншоте мы создаём некоторый дефолтный объект кофе, который потом можно модифицировать набором методов, каждый из которых будет возвращать this, чтобы мы могли делать chain методов. И только один метод brew() возвращает финальный объект. Так же и в mongoose exec() в конце будет выполнять сконструированный запрос.
Если вам было интересно, как получается, что при использовании mongoose или typeorm мы строим наши запросы методом chain функций друг за другом, то этот пост для вас.
Это архитектурное решение удобно тем, что мы не открываем для внешнего пользователя внутреннее устройство нашего класса, а ограничиваем его методами, которые позволяют сконструировать какой-то объект. Часто это очень удобно использовать в контрактах между микросервисами, когда мы хотим создать объект для запроса, при этом сделать это наиболее простым способом, особенно если внутри результат будет содержать кучу вложенных объектов, которые можно создать на основе функций.
В примере на скриншоте мы создаём некоторый дефолтный объект кофе, который потом можно модифицировать набором методов, каждый из которых будет возвращать this, чтобы мы могли делать chain методов. И только один метод brew() возвращает финальный объект. Так же и в mongoose exec() в конце будет выполнять сконструированный запрос.