Parazit & LayerCrafter
Я тут как раз копался с последним слоем прототипа и подумал, как бы тебе скрыть сложность, но при этом сохранить надёжность. Может, нам вместе порешать эту задачу?
Конечно. Спрячь основную логику за чистым API, чтобы никто не видел, что там внутри творится. Используй внедрение зависимостей, чтобы менять компоненты, не трогая вызывающий код, и следи за строгим соблюдением интерфейсов на каждом уровне. Протестируй каждый слой отдельно, а потом собери их вместе в одном понятном и хорошо задокументированном месте. Так у нас и надёжная система, и простой, непробиваемый интерфейс.
Отличная идея, но эта поверхность всё равно будет ловушкой с кучей скрытых багов. Я бы придерживался строгой типизации, использовал бы value objects везде, и тестировал каждый слой независимо, с моками – ни одного монолитного входа, который потом может аукнуть. Держи API тощим, а внутренности широкими.
Звучит надежно, но даже самый простой API может выдать скрытые ошибки. Не забывай про строгую типизацию, value objects и моки, но добавь еще и легковесный аудит, чтобы можно было отследить каждое изменение состояния. Хороший логгер поможет обнаружить скрытые ошибки до того, как они досадят.
Журнал аудита – отлично, но только если не соблазнишься на запись всего подряд. Иначе получится шумный журнал, в котором потеряется суть. Используй структурированные события, а не просто текст. Держи уровень логирования низким, фильтруй по типу изменений и пусть логи направляют тесты, а не наоборот. Только так удастся сохранить полезность аудита.