Vasily
Ну идея такая
Vasily
Ща у тебя есть CardName
Vasily
и Card
Vasily
Это можно объедлинить в один DU
Vasily
И в зависимости от него брать/не брать из базы
Vasily
Тогда у тебя сильно упрощаются сигнатуры функций
Roman
Идея интересная. А можешь семпл кода дать?
Vasily
type CardProxy=
|NotLoaded of CardNumber
|Loaded of Card
Vasily
Дальше пишется обобщенная функция вытаскивания из базы, если надо
Vasily
И условный deactivateCard - это (CardProxy->IoResult<CardProxy option>) list
Vasily
Так, стопэ
Vasily
Тэкс
Vasily
CardNumber- это номер банковской карты
Vasily
Как я понимаю
Vasily
В теории у нас тут может быть набор функций вида CardNumber->'t->CardNumber
Vasily
Точнее
Vasily
't->CardNumber->CardNumber
Vasily
Тогда через паршиал апплай можно делать всякое
Vasily
Да
Vasily
Ты прав
Vasily
Если посмотреть на cardActions.fs
Vasily
То если там везде убрать card в конец функции, можно получить много вкусного
Roman
там она не в конце только в пеймент и топ-ап. Я так сделал, чтобы можно было через паршал апплай сделать серию платежей и пополнений, хотя пока это еще нигде не используется. А ради чего туда карту в конец ставить?
Vasily
Ну в теории у тебя тогда можно большие цепочки операций делать
Vasily
И, возможно, код попроще будет
Roman
но ты же вряд ли будешь делать один и тот же платеж для разных карт?
Roman
как и пополнение
Vasily
Мне лично не очень нравятся подобные сигнатуры:
let setDailyLimit
(currentDate: DateTimeOffset)
(getCardAsync: CardNumber -> IoResult<Card option>)
(replaceCardAsync: Card -> IoResult<unit>)
Vasily
Roman
Vasily
Хотя я в энтерпрайзе ничо не понимаю :)
Vasily
Ну я делаю мейлбокс обычно
Vasily
В него зависимости
Vasily
И уже его дергаю
Vasily
Если надо, оверрайдю
Roman
типа у тебя DI в нем?
Vasily
Ну условно
Vasily
Чтобы можно было при желании заоверрайдить, например, получение из базы
Roman
но если у тебя там нет нужной зависимости, то свалится в рантайме, так?
Vasily
Roman
Одной из основных задач у меня было, чтобы как можно больше ошибок отлавливались в компайл тайме
Vasily
Только желательно, чтобы параметры были после функций, конечно
Vasily
Тогда это имеет смысл
Roman
А мейлбокс с DI это шаг в другом направлиении
Roman
Roman
ааа, текущую дату сдвинуть после зависимостей
Vasily
let processPayment
(currentDate: DateTimeOffset)
(getCardAsync: CardNumber -> IoResult<Card option>)
(getTodayOperations: CardNumber * DateTimeOffset * DateTimeOffset -> IoResult<BalanceOperation list>)
(saveCardAsync: Card -> IoResult<unit>)
(saveBalanceOperation: BalanceOperation -> IoResult<unit>)
Roman
да, имеет смысл
Vasily
В теории currentDate должна быть в конце
Roman
гуд поинт, спасибо, поправлю
Vasily
Ну и есть ощущение, что все это можно зверски упростить
Vasily
Но надо подумать как
Roman
я пока не придумал)
Shub
Vasily
Vasily
Ayrat
Поставил sbt для скалы, пытаюсь скомпилить какой-то простенький хеловорлд. Яебал время компиляции.
@DogeShibu, как вы там живёте, чаи гоняете пока билдится?
Hog
Roman
Vasily
Это ты ещё не пробовал сложный код писать
Ayrat
Hog
Ayrat
прям с разбега на скалу
Hog
СО
Hog
или ОБ
Roman
был Айрат и вот его не стало?
Shub
А за di контейнер поясни
чего за него пояснять, ты видишь, насколько тупая сигнатура у функции только потому, что кто-то решил делать все правильно?
Vasily
Ayrat
От такого не отказываются наверное
Vasily
Hog