Допустим, у нас есть сервис, который должен рассылать сообщения.
public Notificator(IEmailSender sender)
Мы внедряем зависимость через интерфейс
Теперь у нас связаны три сушности
EmailSender
IEmailSender
Notificator
Отныне и навеки, так сказать.
Если же, сделать так:
type Notificator (sender: string -> string -> string -> bool) =
if sender("guest@local", "hello", "who are you?") then
Получается, что функции высшего порядка делают код чище и проще, и интерфейсы тут как бы не особо уже нужны.
Достаточно набора функций, при наличии частичного применения и различные декораторы также становятся не нужны
ServiceUtils
Notificator