FSD + редактирование бизнес-сущности?

Ссылка скопирована
23 февраля 2026 1 ответ

Используя React и FSD пишу примитивный аналог Notion. Разделил код на слои, которые я понимаю так:

  • shared - все, что используется во всем приложении и может быть подключено в любом слое;
  • entities - компоненты, которые определяют бизнес-сущности, условный комментарий, пост, сообщение, но без функционала, то есть сам компонент лишь принимает какие-то данные + слоты для фичей;
  • features - кнопки, формы и прочие элементы управления, которые так или иначе что-то делают с бизнес-сущностями и пользователем, напрямую взаимодействуя с запросами и т.п.;
  • widgets - самостоятельный компонент, который использует внутри себя фичи, сущности и прочие зависимости из вышеперечисленных слоев. Например, виджет поста будет использовать сущность поста, куда будут переданы данные и доступные слоты с фичами.

Использую редактор Tiptap, который, по всей видимости является виджетом, содержащий тулбар с кнопочками, а также сам контент. Но куда в этом случае вставить сущность? Примерный код:

const NoteEditor: React.FunctionComponent<Props> = (props) => {    const {     note   } = props    const {     content,     updated,     update   } = useNoteContent({ note })    const editor = useEditor({     extensions: EXTENSIONS,     content:    content,     editable:   true,     onUpdate:   (data) => update(data.editor.getHTML())   }, [])    if (!editor) {     return null   }    return (     <section className={Styles.Editor}>       <NoteToolbar editor={editor} updated={updated} />       <NoteContent editor={editor} />     </section>   )  }

const NoteEditor: React.FunctionComponent<Props> = (props) => { const { note } = props const { content, updated, update } = useNoteContent({ note }) const editor = useEditor({ extensions: EXTENSIONS, content: content, editable: true, onUpdate: (data) => update(data.editor.getHTML()) }, []) if (!editor) { return null } return ( <section className={Styles.Editor}> <NoteToolbar editor={editor} updated={updated} /> <NoteContent editor={editor} /> </section> ) }

Хук useNoteContent хранит в себе состояние редактора, для того что понимать когда я изменил его содержимое, чтобы сделать кнопку "Сохранить" доступной для взаимодействия. Компоненты NoteToolbar и NoteContent - локальные для виджета, то есть расположены по пути @widgets/NoteEditor/components/...

И вот я не понимаю - получается в данном конкретном случае можно обойтись без сущности Note? Или компоненты NoteContent следует использовать как сущность, поскольку в нем находятся все стили для текста? Но адекватно ли в сущность передавать объект editor?

Дополнительно:

Использую редактор Tiptap, который, по всей видимости является виджетом

С чего вдруг? Обычный шейрд. Максимум энтити.

  • WbICHA, и снова Вы, спасибо! Можно другой вопрос тогда задать - где хранить иконки и прочие файлы?

    Знаю что стили типа reset/fonts/const.css можно хранить в app/styles, то же можно сказать про шрифты и прочее - хранить в app/assets. А если речь идет про переиспользумые ресурсы и стили? Хранить в shared/assets и в shared/styles? Если со стилями я могу быть уверен, что скорее всего так оно и есть, то как лучше всего экспортировать изображения и иконки? Создать публичный апи из папки shared/assets или отдельно для каждого типа ресурса - shared/assets/icons и shared/assets/images? Или лучше вообще убрать их из папки shared и создать папку assets в корне? Смотрю примеры проектов на FSD и вижу абсолютно разные варианты использования ассетов

  • Михаил, я их храню в shared/ui/styles и shared/ui/assets. Имхо, им там самое место. Это всё общее для всего приложения и это всё касается именно интерфейса.
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

    Для начала, давайте разберемся, что такое FSD (Functional Specification Document) и почему редактирование бизнес-сущностей может быть важным.

    FSD - это документ, который описывает функциональные требования к программному продукту. Он содержит информацию о том, как должен вести себя продукт в различных сценариях использования, какие функции должен выполнять, какие данные должен обрабатывать и т.д.

    Редактирование бизнес-сущностей в рамках FSD может быть необходимо по разным причинам. Например, если в процессе разработки вы обнаружили, что определенная бизнес-сущность нуждается в изменениях или дополнениях, чтобы удовлетворить потребности пользователей или бизнес-задачи. Или если вы решили добавить новую функциональность, которая требует изменений в существующих бизнес-сущностях.

    Чтобы провести редактирование бизнес-сущностей в FSD, вам следует выполнить следующие шаги:

    1. Определите, какие бизнес-сущности требуют изменений. Проанализируйте текущие требования и выявите те, которые нужно модифицировать.

    2. Опишите необходимые изменения. Для каждой бизнес-сущности укажите, какие именно изменения нужно внести, чтобы соответствовать новым требованиям.

    3. Обновите документацию. Внесите изменения в FSD, чтобы отразить новые требования и спецификации бизнес-сущностей.

    4. Проверьте изменения. Убедитесь, что все изменения правильно внесены и не противоречат другим частям документа.

    Пример использования редактирования бизнес-сущностей в FSD на языке PHP:

    /**
     * @Entity
     * @Table(name="users")
     */
    class User
    {
        /**
         * @Id
         * @Column(type="integer")
         * @GeneratedValue
         */
        private $id;
     
        /**
         * @Column(type="string")
         */
        private $name;
     
        // Добавляем новое поле для хранения email
        /**
         * @Column(type="string")
         */
        private $email;
     
        // Добавляем геттер и сеттер для нового поля email
        public function getEmail()
        {
            return $this->email;
        }
     
        public function setEmail($email)
        {
            $this->email = $email;
        }
    }

    /** * @Entity * @Table(name="users") */ class User { /** * @Id * @Column(type="integer") * @GeneratedValue */ private $id; /** * @Column(type="string") */ private $name; // Добавляем новое поле для хранения email /** * @Column(type="string") */ private $email; // Добавляем геттер и сеттер для нового поля email public function getEmail() { return $this->email; } public function setEmail($email) { $this->email = $email; } }

    Таким образом, редактирование бизнес-сущностей в FSD может быть важным шагом для обеспечения соответствия продукта требованиям и удовлетворения потребностей пользователей.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно