Size: a a a

Software Design/Architecture/Zen

2020 October 22

VS

Vlad Sobenko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
за пределами функции эта проблема и решается 😂
Как? В ООП у нас есть инстанс класса, который непозволить создать себа невалидно
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Vlad Sobenko
Как? В ООП у нас есть инстанс класса, который непозволить создать себа невалидно
проверкой инвариантов, например. Какая разница? Функции не важно, как вы создаёте валидную codata
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
проверкой инвариантов, например. Какая разница? Функции не важно, как вы создаёте валидную codata
Я про такое. Кто запретит в другом месте создать невалидный инстанс типа?
type NotEmptyStringFn = (string: string) => NotEmptyString|Error
const goodNotEmptyString: NotEmptyStringFn = string => string.length > 0 ? {value: string} : {error: 'empty str'}
const badNotEmptyString: NotEmptyStringFn = string => ({value: ''})
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Vlad Sobenko
Я про такое. Кто запретит в другом месте создать невалидный инстанс типа?
type NotEmptyStringFn = (string: string) => NotEmptyString|Error
const goodNotEmptyString: NotEmptyStringFn = string => string.length > 0 ? {value: string} : {error: 'empty str'}
const badNotEmptyString: NotEmptyStringFn = string => ({value: ''})
Никто. Ссзб, если инварианты не проверили в codata - делайте правильные конструкторы (data)
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Никто. Ссзб, если инварианты не проверили в codata - делайте правильные конструкторы (data)
Я вижу, что можно не експортить тип из модуля. Тогда его можно будет создать только в модуле. Это защитит его.
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Никто. Ссзб, если инварианты не проверили в codata - делайте правильные конструкторы (data)
Тоесть на каждом этапе тип нужно будет перепроверять на валидность?
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Vlad Sobenko
Тоесть на каждом этапе тип нужно будет перепроверять на валидность?
Не на каждом - прокинуть всю валидацию в "энтри-поинт" (чем бы он ни был для бизнес-логики)
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Не на каждом - прокинуть всю валидацию в "энтри-поинт" (чем бы он ни был для бизнес-логики)
Я не про codata. А про случаи, когда джун взял и написал новую ф-цию, которая нарушает инварианты типа.
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Vlad Sobenko
Я не про codata. А про случаи, когда джун взял и написал новую ф-цию, которая нарушает инварианты типа.
Конструктор написал? (data)
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
Конструктор написал? (data)
Можно пример конструктора?
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Vlad Sobenko
Можно пример конструктора?
https://t.me/oop_ru/154010
Вот в вашем примере функция-конструктор
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
Ну джун взял и написал новую badEmptyStringFn для типа NotEmptyString.
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
Тоесть типу мы не сможем доверять в дальнейшем
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Vlad Sobenko
Тоесть типу мы не сможем доверять в дальнейшем
да, результат работы бизнес-логики с "неправильно сконструированными типами" не гарантируется (потому что инварианты не соблюдены) 🤷‍♂️
Всё просто. Почему бизнес-логика должна ещё и валидацией заниматься? - она свои инварианты предоставила? - будьте добры пользуйтесь - иначе ссзб
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
да, результат работы бизнес-логики с "неправильно сконструированными типами" не гарантируется (потому что инварианты не соблюдены) 🤷‍♂️
Всё просто. Почему бизнес-логика должна ещё и валидацией заниматься? - она свои инварианты предоставила? - будьте добры пользуйтесь - иначе ссзб
Ну можно в защитить тип классом:
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Vlad Sobenko
Ну можно в защитить тип классом:
А если нужен ещё один create() - наследование? композиция? Зачем мне класс, если этот create() у меня может быть просто функцией - в чём разница?
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Vlad Sobenko
Ну можно в защитить тип классом:
А $this->val где используется? вхолостую?
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
А если нужен ещё один create() - наследование? композиция? Зачем мне класс, если этот create() у меня может быть просто функцией - в чём разница?
Не - без наследования. Зачем оно?
Разница в том, что у вас ф-ция и тип разделены. И кто то в другой части приложения может создвать этот тип неправильно.
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
˸̧̨ ͅBlack Akula˸̧̨ ͅ ̤ ̬̪
А $this->val где используется? вхолостую?
Решил не захламлять этим.
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Vlad Sobenko
Не - без наследования. Зачем оно?
Разница в том, что у вас ф-ция и тип разделены. И кто то в другой части приложения может создвать этот тип неправильно.
Создаст - получит неверный результат работы с созданным "типом" - ссзб, что не проверил инвариант или не использовал уже написанный ранее конструктор
источник