Size: a a a

Software Design/Architecture/Zen

2021 November 23

NF

Nikita Fedorov in Software Design/Architecture/Zen
у него много косяков, но в целом это похоже на то как это делается в том же шарпе, единственная проблема в том что js это не c# и он напихал кучу костылей которые делают из элегантного кода неподдерживаемый высер
источник

SP

Stanislav Popov in Software Design/Architecture/Zen
в шарпе тоже это все делается плохо )
источник

E

Emanresun in Software Design/Architecture/Zen
раскрой эти места
источник

E

Emanresun in Software Design/Architecture/Zen
понять где здесь пахнет больше всего
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
не, там всё красивенько
источник

SP

Stanislav Popov in Software Design/Architecture/Zen
Option/Result повсемесно используются?
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
ну да
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
но не в домене
источник

E

Emanresun in Software Design/Architecture/Zen
это плохо использовать в домене?
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
это первая явная ошибка, хз че у него монады в домене забыли и почему валидация в домене
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
домен должен иметь ровно 0 зависимостей
источник

E

Emanresun in Software Design/Architecture/Zen
в js'e трудно придется в этом плане)
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
домен должен поддерживать инварианты, не заботясь о валидации
источник

SP

Stanislav Popov in Software Design/Architecture/Zen
кстати странно что у него это получилось

export const right = <L, A>(a: A): Either<L, A> => {
 return new Right<L, A>(a);
};

когда я делал на фантомных типах штуку, мне компилятор настойчиво говорил что у тебя нет L. и в этом есть смысл, потому что L в рантайме сконструировать никак нельзя, если его не будет в рантайме, всмысле нельзя просто взять и сделать some_either::L
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
ну первое что я заметил это то что он пытается сделать паттерн дефолтный конструктор, но он работает только если есть полиморфизм, так что он пилит вместо него статические методы, что в целом убивает идею этого паттерна
источник

SP

Stanislav Popov in Software Design/Architecture/Zen
а ну собственно если сделать right(1), то тип будет

Either<unknown, number>
источник

SP

Stanislav Popov in Software Design/Architecture/Zen
т.е. тут это прокатывает, но если хочется фантомный тип, то он всегда будет unknown, либо конструктор будет явно требовать его передавать
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
так же он накастылил базовые классы ValueObject и т.д. которые в js нельзя накастылить так чтобы они были трейтами
источник

SP

Stanislav Popov in Software Design/Architecture/Zen
а в шарпе можно чтоли )
источник

NF

Nikita Fedorov in Software Design/Architecture/Zen
> ладно, можно, но это не то чего кто либо хочет
источник