iods v2.0.0
IO-DS
Паттерн, на основе RORO, суть которого в том, что методы (и функции) принимают и возвращают объект следующего вида:
type InputInterface<
Data = unknown,
Settings = undefined
> = {
/** Входные данные */
data: Data;
/** Опции */
settings?: Settings;
};Обязательность settings определяется передачей дженерику интерфейса Settings.
IO-DS - это типа: "Инпут-Аутпут Дата-Сеттингс"... вот такая это вот дичь. Креатива - нуль, как и смысла во всём этом.
Установка
yarn add iods -T -Dили
npm i iods -E -DВерсионирование
Данный проект не придерживается SemVer. Отсутствие breaking changes гарантируется только в patch-версиях.
Если вы предпочитаете строго не фиксировать версию, то рекомендуемый semver range operator - ~.
Yarnпозволяет это сделать при помощи флага-Tпри вызове команды установки пакета.NPMже не имеет подобного аналога, но есть-Eкоторый фиксирует устанавливаемую версию, т.е. у версии будет отсутствовать какой-либоsemver range operator. В таком случае, необходимо самостоятельно добавить~перед номером версии.
Состав
InputInterface;OutputInterface.
OutputInterface копирует InputInterface, а существует лишь затем, чтобы иметь псевдоним, соответствующий предназначению. Крч, алиас и этим всё сказано.
Исключения
- Правило не распространяется на статичные методы;
- Методы могут возвращать
undefined, вместо описанного объекта.
Критика
- Зачем объект с фиксированным интерфейсом первого уровня, если можно его же трансформировать в первый и второй аргументы тех же методов?
- Зачем оно вообще, ТайпСкрипт ж в окне?!
Преимущества
- Те же, что и в RORO pattern;
- Фиксируя первый уровень, не упраздняя до первого и второго аргументов, открыто демонстрируем, что даже не стоит думать о расширении метода очередным входным аргументом;
- Принимая во внимание Исключения #2,
undefinedв ответе иundefinedв.dataответа - не одно и тоже, т.е. есть пространство для манёвров (типа простоundefined- негативный результат, аundefinedв.data- позитив из ничего); - У автора теперь имеется возможность выёживаться тем, что он является автором чего-то там (точнее, тут).
Замечание
Данный проект не придерживается SemVer и GitFlow.
Причина подобного решения - это мелкий проект, изменения в котором происходят не часто. Как следствие, тикать major всякий раз, когда методология меняется и не совместима с предыдущей - выглядит глупо (а если учитывать суть проекта - то это вообще абсурд). Всё по тому же, отпадает необходимость в develop- и release-ветках, так как любая редкая правка - это полноценная версия, тут нечего "разрабатывать".
Лицензия
А на это вообще нужна лицензия? Если да, то эта... любимая, ну эта: MIT License. Текст с её сутью скопипастил в файл LICENSE.
EN
TypeScript pattern of method declarations.
Installing
yarn add iods -T -Dor
npm i iods -E -DComposition
InputInterface- main interface;OutputInterface- alias ofInputInterface, used to determine method'sreturninterface.
Exceptions
staticmethods;- Methods can return an
undefined.
Criticism
- U: Hm-m, so, idea of 2 arguments in methods - is not for u?... instead of object with 2 properties, yeah?
- U: You mean like... cretinism?!
- I: Sorry for my English.
Advantages
- Everything from RORO, even if it only has one;
- Fixed first level with 2 properties, instead of 2 arguments, openly demonstrates people that they should not even think about expanding the method with (an)other input argument(s);
- Given the Exception #2, it becomes clear that
undefinedresult and result.data'sundefinedthat it is not the same thing; (I mean,undefinedresult - is kinda negative result, whileundefinedat result's.data- is kinda positive nothing :) - Now, the author is who he is.
Note
This project doesn't follow to SemVer or GitFlow rules.
License
Li... what?! Ehm-m, I-i-hm, so ok... just a second, ple-a-ase. Oh, found it:
This project is licensed under the MIT License.