как создать сложность
Вот я только что придумал.
Предположим, у нас есть код, который по каким-то описаниям пользователя говорит "да" или "нет" (можно ему или нет).
MVP: fn allow_user(...) -> bool
Теперь мы начинаем его выносить в отдельный сервис. Но, вместо того, чтобы завернуть bool в HTTP, мы ... чуть-чуть увеличиваем вычурность.
Пусть у нас будет не bool а лямбда, причём с частичным замыканием. Лямбда может захватывать параметры, в том числе, переданные в описании пользователя, откладывая момент принятия решения. Часть параметров захватывается в момент формирования лямбды, но часть параметров остаётся свободной и должна быть передана в момент evaluate. Поскольку evaluate не хочет знать про сигнатуру лямбды, мы делаем отдельную систему глобальных переменных, которые захватываются по ссылке, и которые могут меняться (т.е. захват неполный).
Поскольку это всё происходит через сеть, наша лямбда - это RPC, причём RPC вызов allow_user возвращает объект, являющийся RPC (от сервера, исполняющего allow_user в сторону сервера, отправившего запрос за allow_user). Разумеется, нам нужен портабельный механизм описания сериализации RPC-запросов.
И может быть, даже, через XML, с глобальным реестром определений для сущностей в запросах.
(И назад этот фарш не провернуть)
Предположим, у нас есть код, который по каким-то описаниям пользователя говорит "да" или "нет" (можно ему или нет).
MVP: fn allow_user(...) -> bool
Теперь мы начинаем его выносить в отдельный сервис. Но, вместо того, чтобы завернуть bool в HTTP, мы ... чуть-чуть увеличиваем вычурность.
Пусть у нас будет не bool а лямбда, причём с частичным замыканием. Лямбда может захватывать параметры, в том числе, переданные в описании пользователя, откладывая момент принятия решения. Часть параметров захватывается в момент формирования лямбды, но часть параметров остаётся свободной и должна быть передана в момент evaluate. Поскольку evaluate не хочет знать про сигнатуру лямбды, мы делаем отдельную систему глобальных переменных, которые захватываются по ссылке, и которые могут меняться (т.е. захват неполный).
Поскольку это всё происходит через сеть, наша лямбда - это RPC, причём RPC вызов allow_user возвращает объект, являющийся RPC (от сервера, исполняющего allow_user в сторону сервера, отправившего запрос за allow_user). Разумеется, нам нужен портабельный механизм описания сериализации RPC-запросов.
И может быть, даже, через XML, с глобальным реестром определений для сущностей в запросах.
(И назад этот фарш не провернуть)
no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)