FSD + редактирование бизнес-сущности?
Используя 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, который, по всей видимости является виджетом
С чего вдруг? Обычный шейрд. Максимум энтити.
Знаю что стили типа reset/fonts/const.css можно хранить в app/styles, то же можно сказать про шрифты и прочее - хранить в app/assets. А если речь идет про переиспользумые ресурсы и стили? Хранить в shared/assets и в shared/styles? Если со стилями я могу быть уверен, что скорее всего так оно и есть, то как лучше всего экспортировать изображения и иконки? Создать публичный апи из папки shared/assets или отдельно для каждого типа ресурса - shared/assets/icons и shared/assets/images? Или лучше вообще убрать их из папки shared и создать папку assets в корне? Смотрю примеры проектов на FSD и вижу абсолютно разные варианты использования ассетов
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для начала, давайте разберемся, что такое 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; } }
Таким образом, редактирование бизнес-сущностей в FSD может быть важным шагом для обеспечения соответствия продукта требованиям и удовлетворения потребностей пользователей.