Documentation
¶
Overview ¶
Package refusaldomain — ЕДИНСТВЕННОЕ объявление того, чем продукт называет себя в теле отказа (задача продукта #2099, приёмка WIRE-1, предмет ПР-3, сценарии WIRE-3-01…03).
Предмет ¶
Клиент различает полосы отказа по ПАРЕ «домен + признак полосы», а не разбором прозы сообщения — так предписывают конвенции. Значит `ErrorInfo.domain` есть часть контракта отказа, а не косметика, и то, что в нём стоит, читается как имя продукта, произведшего отказ.
Служба выносится самостоятельным продуктом. По проверочному вопросу нормы разделения — «это имя, которым продукт себя называет, или код, который он исполняет?» — домен отказа есть первое: его читает арендатор чужого облака, не открывая наш исходный код, достаточно посмотреть в тело ответа.
Почему объявление, а не константа по месту ¶
До этого пакета суффикс стоял ТРЕМЯ литералами в трёх производителях отказа, и каждый нёс комментарий «совпадает с доменом соседних полос: сервис один». Совпадение при этом ничем не держалось: три места об одном предмете расходятся на первой же правке, и расходятся молча — покраснеть их различию нечем, потому что оно нигде не выражено.
Почему СУФФИКС, а не готовый домен ¶
Домен собирается из двух половин: имя службы наследуется как КОД (форма `<служба>.<суффикс>` принадлежит платформе и не переизобретается), суффикс — это ИМЯ, и он не наследуется. Объявляй здесь готовую строку — и вторая служба того же продукта завела бы вторую строку, то есть тот же класс на уровень выше.
Почему объявление ПРОЦЕССА, а не значение в подписи каждого производителя ¶
Производители отказа — функции уровня пакета, и ближайший из них зовётся общим отображателем ошибок (`shared.MapRepoErr`), который зовут отовсюду. Протащить величину в подпись значило бы внести имя продукта в сигнатуру каждого вызывающего в дереве — то есть сделать предметом всякого места ровно то, что этот пакет из всех мест и убирает.
Цена решения названа честно: величина живёт в процессе, и её невыполненное объявление — состояние, представимое в коде. Оно и есть предмет стража Require: сборка, объявления не сделавшая, НЕ ПОДНИМАЕТСЯ. Умолчания здесь нет намеренно — величина, которую построение подставляет молча, предметом стража быть не может, он зелен при любом входе.
Index ¶
Constants ¶
const ProductSuffix = "kaname.cloud"
ProductSuffix — суффикс, которым ЭТОТ продукт называет себя в домене отказа.
Значение решено приёмкой WIRE-1 (решение W3): Kachō объявляет `kacho.cloud`, Kaname — свой. Здесь оно ОБЪЯВЛЕНО, а не выведено: вывести имя продукта из имени платформы значило бы вернуть ту связь, ради разрыва которой продукт и получил своё имя.
const ServiceIAM = "iam"
ServiceIAM — половина домена, называющая СЛУЖБУ.
Наследуется как код: форма `<служба>.<суффикс>` принадлежит платформе, и переизобретать её незачем. Объявлена здесь затем, чтобы производители отказа не носили своей копии строки — той самой, которой их было три.
Variables ¶
var ErrUndeclared = errors.New("refusaldomain: суффикс домена отказа не объявлен")
ErrUndeclared — суффикс не объявлен.
Отдельная величина, а не текст: страж старта и проба обязаны узнавать именно это состояние, а не сравнивать прозу.
Functions ¶
func Compose ¶
Compose собирает домен из двух половин.
Чистая функция: она и есть форма домена, и проверять её можно, не трогая объявления процесса. Пустая половина даёт пустой домен — «половина имени» не является именем, и отдавать `iam.` либо `.kaname.cloud` значило бы выдать огрызок за координату.
func Declare ¶
Declare объявляет суффикс на процесс. Зовётся композиционным корнем.
Повтор ТЕМ ЖЕ значением — не находка: корень и проба объявляют одно и то же, и запрещать это значило бы запрещать проверяемость. Второе объявление ДРУГИМ значением отвергается: два имени одного продукта расходятся молча, и расходятся они у клиента, который уже ключуется на первое.
func Declared ¶
Declared — объявленный суффикс и признак объявленности.
Второй результат обязателен: без него «не объявлено» неотличимо от «объявлено пустым», и решение по первому в одиночку читало бы умолчание как утверждение.
func For ¶
For — домен отказа названной службы по ОБЪЯВЛЕННОМУ суффиксу.
Пустая строка при необъявленном суффиксе — не умолчание, а отсутствие величины: в работающем процессе это состояние недостижимо, его отвергает Require до подъёма слушателей. В пробе оно означает, что проба суффикса не объявила, и всякое её утверждение о домене покраснеет.
Types ¶
This section is empty.