Вышел первый пакет Yii3 yiisoft/friendly-exception. Он состоит из одного интерфейса https://github.com/yiisoft/friendly-exception/blob/master/src/FriendlyExceptionInterface.php, который нарушает как минимум два принципа.



Принцип именования: исключение должно само иметь "Human understandable name", а не имплементировать лишний метод getName(). Имя класса — это и есть главное название, а для дополнительной информации предусмотрен стандартный метод getMessage().



Принцип разделения интерфейсов. Метод public function getSolution(): ?string обуза, потому что при имплементации интерфейса без предполагаемого решения придется добавлять плейсхолдер return null. Вместо этого правильнее было сделать отдельный интерфейс с сигнатурой без null, например:



interface SolutionAwareExceptionInterface extends Throwable

{

public function getSolution(): string;

}




Помимо этого интерфейс почему-то не наследует Throwable, что позволяет использовать его вне контекста исключений. Хорошая практика — максимально ограничивать контекст использования для предотвращения выстрелов в ногу.



В целом пакет выглядит бесполезным без обработчика этого самого FriendlyException. Это интерфейс ради интерфейса. Задача, которую он якобы решает, настолько тривиальна, что при необходимости проще решить её в приложении самому, чем тащить еще одну библиотеку.