-
Notifications
You must be signed in to change notification settings - Fork 212
docs(abstractions): add feature description #78
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
docs(abstractions): add feature description #78
Conversation
@binjospookie пингани (или кинь в чат), как будет готово к ревью |
@martis-git давай считать за преревью) у меня есть пара вопросов:
|
@binjospookie советую ознакомиться с тем, как это ребята делали примерно)
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@binjospookie в целом то неплохо, но много что доделать бы еще)
-
В целом, повторюсь, советую ознакомиться с тем, как это мы с ребятами делали уже (тут прям оч хорошо прослеживаются те правки которые я накидал тебе)
-
Как минимум то что сразу в глаза бросается - доработать бы в плане структуры и readability для пользователя
Сейчас же хедеров нет и структура не прослеживается
А "подробная инфа", к-рая прям всем-всем пользователям не понадобится - не скрывается в спойлерах -
Вот все 11 правок - это только по форме было)
Если же смотреть по тому "чего не хватает содержательно" - то будет еще 20, но для этого как минимум придется еще за тебя работу проделатьДа и ты задолбаешься 30 чужих правок вносить, нежели сам написать сразу полноценно))
Поэтому прошу еще раз пройтись по изначальной дискуссии и посмотреть - какие тезисы там выдвигаются
Пока же, извини, возникает впечатление, что ты из своих ощущений писал больше
UPD: Можно пройтись по ~готовой доке, где тоже "бизнес-ценности" и "функциональность" разбираются
@@ -0,0 +1,50 @@ | |||
Feature — изменение в продукте, которое несет ценность пользователю. | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вынес бы в concepts/abstractions/feature.md
@@ -0,0 +1,50 @@ | |||
Feature — изменение в продукте, которое несет ценность пользователю. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не хватает хедера с overview секцией
Feature — изменение в продукте, которое несет ценность пользователю. | |
# Feature | |
## Описание | |
`feature` — изменение в продукте, которое несет ценность пользователю. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Рассмотрим некоторые GitHub features: | ||
|
||
- issues | ||
- actions | ||
- marketplace |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я бы вынес такое отдельным пунктом в ## Примеры
И тогда можно не только про GitHub сказать, но и про YouTube, и да - тот же маркетплейс
В принципе, если этот раздел будет до основного текста - вроде нормально по читаемости и смыслу будет
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тип как "Примеры из жизни"
Features могут перекликаться с другими features. Например, marketplace позволяет найти готовый action, а не писать свой. | ||
|
||
Feature может содержать другие features: при создании issue можно проставить labels, assignees, milestone. | ||
|
||
Таким образом приходим к следующей структуре: | ||
|
||
``` | ||
. | ||
├── issues/ | ||
│ ├── assignees | ||
│ ├── labels | ||
│ └── milestone | ||
├── actions/ | ||
├── marketplace/ | ||
│ ├── list | ||
│ ├── search | ||
│ └── filter | ||
``` | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Да, понимаю что у тебя была подводка на основании примеров, но надо бы как-то более структурированно разделить и описать что есть фича (более содержательно)
См. как @AlexandrHoroshih сделал
- Про структуру то что ты описал - это хорошо, но именно данная структура больше относится к
nested-features
Т.е. я бы добавил ее как раскрывающийся спойлер
- Про
nested-features
- по-моему была речь на одном из созвонов, чтоnested-features
у нас как таковых нет, у нас максимум - фичи могут "группироваться" по какой-то доменной зоне (например, условноfeature/auth/by-phone
,feature/auth/by-oauth
и т.д.)
При этом группировка - это значит что просто фичи кладутся в одну папку, НО НЕ БОЛЕЕ
Иначе будет большое желание связывать эти фичи тем или иным способом - а вот отсюда и возникает большая часть проблем
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
├── issues/
│ ├── assignees
│ ├── labels
│ └── milestone
├── actions/
├── marketplace/
это же все как раз не фичи, а сущности над которыми и строятся фичи.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вай нот? Возможность создать issue -- фича. Возможность повесить label на issue -- тоже фича.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
создать issue это фича, но issue сами по себе это не фича.
Подобные фичи ведут как раз к необходимости импортить фичи из фич. И как раз эта проблема и привела к появлению такой сущности как entities
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Готовые issue — результат создания.
Возможность создания — фича.
Возможность повесть label — фича.
Тот же label несёт пользователю ценность, например, можно указать тип issue.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот именно что не сам label несет ценность, а именно возможность повесть лейбл на что-то несет ценность.
В общем я свое мнение по поводу этого писал тут #23 (comment)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лейбл в контексте issues.
Будь ещё какой-то лейбл, то, да, его частя болталась бы в entities.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут больше с @ilyaagarkov соглашусь
Да и в целом у нас больше людей в core-team, которые считают что фича - конкретная бизнес-ценность и действие (здесь кста тож про это писал)
Я с entities плотно не работал, тож обычно похожим образом на фичи разбивал (labels-list, issue-details и т.д.)
Но похоже на правду - что при разбиении как предлагает @ilyaagarkov и другие ребята (entities + features) - архитектура будет более масштабируемой, читаемой и при этом - сведутся к минимумы необходимости кросс-импортов (а это главный бич сейчас у похожих подходов)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лейбл в контексте issues.
Будь ещё какой-то лейбл, то, да, его частя болталась бы в entities.
Ну если у тебя лейбл только для ишью (хотя обычно тот же лейбл и на пуллреквесты вешается), то можно его issue-label
назвать
Чтобы более плоская структура получалась, и не нужно было вкладывать
Хотя с другой стороны, это уже похоже на проблему nested-entities
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@binjospookie @ilyaagarkov можем обсудить попозже в войсе
│ └── filter | ||
``` | ||
|
||
Как выглядит feature в реализации? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А вот здесь как раз можно выделить секцию для структуры
## Реализация
...
|
||
Как выглядит feature в реализации? | ||
|
||
Зачастую, это логическая часть и способ взаимодействия с ней.<br /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
По-моему хватит просто переноса на след. строку ,без br
Логическая часть = feature `model`. Это место, где описаны правила, по которым существует feature. | ||
|
||
Рассмотрим на примере формы аутентификации: | ||
|
||
- хранилище значений полей формы (email, password) | ||
- хранилище валидности формы (ошибки в полях) | ||
- события обновления хранилищ | ||
- эффект отправки формы | ||
|
||
Этому слою feature не важно как с ним взаимодействует пользователь. Через браузер или через командную строку. | ||
|
||
Посредником между пользователем и feature model выступает визульный слой: `UI` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот я бы прям на верхнем уровне описал что-то вроде
По реализации `feature` может иметь любые низкоуровневые абстракции (ui, lib, api, model), но чаще всего ограничивается двумя:
- `ui/` - логика отображения фичи
> Добавляем спойлер с более подробной инфой, который не должен глаза мазолить
- `model/` - бизнес-логика фичи
> И здесь снова спойлер - сюда бы как раз добавил пункт "Рассмотрим на примере формы аутентификации: ..."
├── feature/ | ||
│ ├── model (logic) | ||
│ └── ui (visual) | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Посмотри как в README сделано примерно
```sh
├── model # Business logic
├── feature/ | ||
│ ├── model (logic) | ||
│ └── ui (visual) | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не хватает в конце раздела что-то вроде Further Reading (опять же глянь примеры которые кидал выше)
Как минимум добавить ссылка на изначальную дискуссию должна быть
## 📑 См. также
<!-- TODO: Возможно позже надо вынести в md-var -->
- [*Обсуждение* "Что есть 'feature'?"](https://github.com/feature-sliced/wiki/discussions/23)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
От себя бы добавил еще следующие ссылки:
- https://ryanlanciaux.com/blog/2017/08/20/a-feature-based-approach-to-react-development/
- https://alexmngn.medium.com/why-react-developers-should-modularize-their-applications-d26d381854c1
- https://alexmngn.medium.com/how-to-better-organize-your-react-applications-2fd3ea1920f1
- https://www.pluralsight.com/guides/how-to-organize-your-react-+-redux-codebase
close #71