feature-sliced / documentation

🍰 Architectural methodology for frontend projects
https://feature-sliced.design
MIT License
1.41k stars 146 forks source link

new example project #607

Closed AKosogorov closed 7 months ago

AKosogorov commented 11 months ago

Add new example project on Vue 3

netlify[bot] commented 11 months ago

Deploy request for pr-fsd pending review.

Visit the deploys page to approve it

Name Link
Latest commit e94519b28e639d142734dd930e8cc415c4b68937
azinit commented 11 months ago

@feature-sliced/core

illright commented 10 months ago

Hi! Sorry it took us a while to get to this project. I gave it a look and overall I like it! It's a solid structure with a lot of covered ground. Especially that it's a Vue project, we need those.

Here's some notes:

Let me know what you think about these notes, and if you'd like to make any changes to your project or would prefer to keep it as it is.

AKosogorov commented 10 months ago

Hi! Sorry it took us a while to get to this project. I gave it a look and overall I like it! It's a solid structure with a lot of covered ground. Especially that it's a Vue project, we need those.

Here's some notes:

  • You decided to group features by entity, which is not necessarily a bad thing, but it does make it seem like your entities are also your features. Consider joining some features together, for example, add to card, remove from cart and change quantity sound similar enough to be part of a single feature, add-product-to-cart
  • I noticed you have a widget called UI. I'm not sure what that means, since most Vue components are UI, so this name doesn't tell me what I need to know about this widget at a glance. If I understood correctly, that's a showcase page of your UI components. In this case, it doesn't seem like this page has a lot of business value for your user, so I'd put it entirely in Shared.
  • In general, I noticed a lot of files and folders, with most folders having index.ts. I don't know how you feel about this, but from a side look, it made me feel quite lost in your project. If you find it difficult to work with too, consider the NGAF technique. It basically means "not giving a fuck", dropping the pursuit of rigid structure and instead enjoy your codebase. Remember that FSD is all about pain-driven development -- you only need decomposition if not decomposing causes you pain.

Let me know what you think about these notes, and if you'd like to make any changes to your project or would prefer to keep it as it is.

Добрый день! 1) Не совсем понял как это и зачем "объединить в одну фичу add-product-to-cart. Смысл ведь наоборот в том, чтобы на каждое действие была одна фича. С названиями группировочных папок в фичах согласен. Можно немного запутаться, но по другому я бы не стал называть папки в данный момент, потому что те фичи которые там лежат, совершают действия над одной сущностью.

2) Перенес компоненты из widget/UI -> shared/ui/ui-kit

3) Тут я не совсем понял о чем речь. О том что например в папке api лежит только один файл index.ts и можно было бы создать файл api.ts вместо этого? Если да, то папка/index сочетание мне больше нравится.

На этом моменте я бы оставил все как есть. В будущем возможно добавлю новый функционал, который был в планах.

illright commented 10 months ago
  1. Смысл главным образом в том, чтоб в проекте было легко ориентироваться текущим и будущим разработчикам. Принцип "одно действие — одна фича" — хорошая отправная точка, но иногда становится понятно, что для пользователя действие "изменить количество в корзине" и "убрать из корзины" несут примерно одинаковый business value, поэтому разделение этого на две фичи лишь создаёт дополнительное архитектурное усложнение, которое не особо помогает проекту. В любом случае, это мое мнение, ты можешь с этим не согласиться.
  2. Я скорее про то, что каждый компонент лежит в своей папке вместе с отдельным индексом.
  3. Кстати, файла src/widgets/Product/index.ts быть не должно, т.к. индексные файлы могут быть только у слайсов, а не у групп слайсов.
AKosogorov commented 10 months ago
  1. Смысл главным образом в том, чтоб в проекте было легко ориентироваться текущим и будущим разработчикам. Принцип "одно действие — одна фича" — хорошая отправная точка, но иногда становится понятно, что для пользователя действие "изменить количество в корзине" и "убрать из корзины" несут примерно одинаковый business value, поэтому разделение этого на две фичи лишь создаёт дополнительное архитектурное усложнение, которое не особо помогает проекту. В любом случае, это мое мнение, ты можешь с этим не согласиться.
  2. Я скорее про то, что каждый компонент лежит в своей папке вместе с отдельным индексом.
  3. Кстати, файла src/widgets/Product/index.ts быть не должно, т.к. индексные файлы могут быть только у слайсов, а не у групп слайсов.

1) Возможно можно и объединить. Я считаю что в моем примере можно оставить как есть и никаких доп сложностей не создано) 2) Понял теперь о чем речь. Когда я это делал, была какая-то причина, но сейчас я не могу с ходу вспомнить. Выглядит не очень, согласен. Возможно надо бы это убрать. 3) Удалил лишний индекс

illright commented 9 months ago
  1. Аналогичный комментарий относительно нескольких других индексов, например:

    • src/features/Cart/index.ts
    • src/features/Product/index.ts

    При этом, у некоторых сегментов/слайсов наоборот нет индекса, а должен быть, например, src/shared/ui

  2. [блокер] На слое Pages происходит что-то непонятное, файлы типа src/pages/router.ts не принадлежат никакому слайсу, и при этом импортируют из них. По методологии файлы не могут быть внутри слоя без слайсов

  3. [блокер] Внутри некоторых страниц тоже очень нестандартная структура, не прослеживается деление на сегменты.

netlify[bot] commented 7 months ago

Deploy request for pr-fsd pending review.

Visit the deploys page to approve it

Name Link
Latest commit 53109d55cb286d3d645ecfc297240600bc207bee
AKosogorov commented 7 months ago
  1. Аналогичный комментарий относительно нескольких других индексов, например:
  • src/features/Cart/index.ts
  • src/features/Product/index.ts

При этом, у некоторых сегментов/слайсов наоборот нет индекса, а должен быть, например, src/shared/ui

  1. [блокер] На слое Pages происходит что-то непонятное, файлы типа src/pages/router.ts не принадлежат никакому слайсу, и при этом импортируют из них. По методологии файлы не могут быть внутри слоя без слайсов
  2. [блокер] Внутри некоторых страниц тоже очень нестандартная структура, не прослеживается деление на сегменты.

1) убрал лишние индексы из фич 2) почистил pages переместив логику роутинга в app

illright commented 7 months ago

Можешь еще, пожалуйста, устранить ошибки линтера? Тогда можно будет влить

AKosogorov commented 7 months ago

Можешь еще, пожалуйста, устранить ошибки линтера? Тогда можно будет влить

сделал lint

illright commented 7 months ago

Спасибо!