Или может быть в такой ситуации вам как раз уже не надо принуждать нейронку к этому всему?
Если вы сами можете свернуть сложную логическую схему из нескольких десятков классов/структур данных в функциональный пайплайн из 10 инструкций? И никаких "паттернов проектирования".
Вы быстрее напишите это сами и лучше будете понимать свою систему, чем ежели станете мучить агентов в чате с мутными перспективами...
Если вы считаете, что у вас нет на это всё времени -- просто закройте этот паблик и потупите как обычно в какие-нибудь рилсы мемчики новости.
Что касается тех из вас, кто действительно хочет научиться управлять своим собственным умом, в дополнение к Функциональным архитектурам как свободному гайду готовлю также формальный учебный фреймворк Last Principles Framework (застолбил имя:). Будем в нём разбирать на практике темки system/software design с точки зрения теории категории, теории типов и т.д.
Ключевой акцент не в том, "как это лучше сделать на практике", а в том чтобы видеть во всём своём коде правильную математику, и реализовывать задачки абсолютно правильным (и часто единственно возможным в смысле правильности) способом. Возможно даже и нейронки не понадобятся, ну как минимум сможете использовать совсем лёгкие модельки, так как кодить придётся простые чистые функции.
Вот простой пример:
c#
public Document Parse(object file)
{
if (file is CsvFile csv) { /* парсим CSV */ }
else if (file is ExcelFile excel) { /* парсим Excel */ }
else throw new ArgumentException();
}
Надеюсь что 98% из вас поморщатся при виде is и явного приведения типов, не говоря уже про нарушение OCP.
Но какие варианты решения всплывут у вас в голове сразу (или после сознательного обдумывания)?
1. Создать абстрактный класс SourceFile с виртуальным методом Document Parse().
2. Создать интерфейс IParsable с методом Document Parse().
3. Создать генерик SourceFile<T> с методом Parse().
Да, но... полиморфизм подтипов не гарантирует полноту при добавлении нового формата (новый класс может просто не реализовать интерфейс)...
параметрический полиморфизм не описывает сумму типов, а привязывает данные к обработчику, усложняя композицию...
По-взрослому же мы хотим чтобы компилятор заставлял нас исправить точки вызова, если добавлен новый формат парсинга.
Ставь китика если откуда-то понял что тут нужно задать копроизведение и уникальный морфизм из суммы в произвольный тип T, который гарантируется универсальным свойством, склеивающим морфизмы из компонентов. Компилятор вынужден требовать обработку каждого случая, это математическая необходимость.
Этим и будем заниматься в LPF.
P.S. Ладно, ты наверняка ООП-шник, ближе всего будет паттерн Type-Safe Builder, который кстати хорош для DSL — ментаты кто занимается на ФА, понимаете, какие классные теоретические склейки возникают?