Skip to content
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

Feat/translate some files to uz #650

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
sidebar_position: 3
sidebar_class_name: sidebar-item--wip
---

import WIP from '@site/src/shared/ui/wip/tmpl.mdx'

# Dekompozitsiya eslatmalari

<WIP ticket="213" />

## Dekompozitsiyaning roli va ahamiyati {#the-role-and-meaning-of-decomposition}

> Muammolar, Agar e'tibor bermasangiz nima bo'ladi, Bu qanday yordam berishi mumkin, Nima uchun bu muhim, O'zgarishlarga qarshilik haqida
## Mas'uliyat doirasini qanday aniqlash mumkin {#how-to-determine-the-scope-of-responsibility}

> Qatlamlar mezoni

[Скачать PDF](/files/choosing-a-layer-ru.pdf)

## Namunalar {#examples}

### Tweet

![decomposed-tweet-bordered-bgLight](/img/decompose-twitter.png)

### GitHub

![decomposed-github-bordered](/img/decompose-github.jpg)

### Maketni bo'lish {#design-mockup}

<WIP ticket="224" />

> Показать на примере макета, как декомпозируется логика и преображается в архитектуру с модулями - ma'lum bir fayl tuzilmasi bilan
Mantiq dekompozitsiyasi va arxitektura modullariga aylanishini

## Hamda ko'ring {#see-also}
- [(Тред) Общая логика для фич и сущностей](https://t.me/feature_sliced/4262)
- [(Тред) Декомпозиция разбухшей логики](https://t.me/feature_sliced/4210)
- [(Тред) Про понимание зон ответственности при декомпозиции](https://t.me/feature_sliced/4088)
- [(Тред) Декомпозиция виджета ProductList](https://t.me/feature_sliced/3828)
- [(Статья) Разные подходы при декомпозиции логики](https://www.pluralsight.com/guides/how-to-organize-your-react-+-redux-codebase)
- [(Тред) Про разницу между фичами и сущностями](https://t.me/feature_sliced/3776)
- [(Тред) Про разницу между фичами и сущностями (2)](https://t.me/feature_sliced/3248)
- [(Тред) Про применение критериев при декомпозиции](https://t.me/feature_sliced/3833)
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
hide_table_of_contents: true
pagination_prev: intro
---

# 🚀 Tez boshlash

<span class="badge badge--success margin-bottom--md">LEARNING-ORIENTED</span>

<p class="summary">
Xush kelibsiz! Bu bo'lim Feature-Sliced Design dasturini qo'llash va metodologiya asoslariga tezroq kirishni taqdim etadi. Shuningdek, siz metodologiyaning asosiy afzalliklari va uni yaratish sabablarini tushunasiz.
</p>

## Asoosiy {#main}

import NavCard from "@site/src/shared/ui/nav-card/tmpl.mdx"
import { RocketOutlined, BuildOutlined, PlaySquareOutlined } from "@ant-design/icons";

<NavCard
title="Обзор"
description="Metodologiyaning qisqacha tavsifi, uning tushunchalari va qo'llanilishi"
to="/docs/get-started/overview"
Icon={RocketOutlined}
/>
<NavCard
title="Tutorial"
description="Metodologiyani qo'llash bo'yicha kirish tutoriali"
to="/docs/get-started/tutorial"
Icon={PlaySquareOutlined}
/>
<NavCard
title="Dekompozitsiya eslatmalari"
description="Mantiqni misollar va mezonlar bilan ajratish bo'yicha eslatma"
to="/docs/get-started/cheatsheet"
Icon={BuildOutlined}
/>
102 changes: 102 additions & 0 deletions i18n/uz/docusaurus-plugin-content-docs/current/get-started/overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
sidebar_position: 1
---

# Qisqacha ma'lumot

## Menga tog'ri keladimi? {#is-it-right-for-me}

FSD ba'zi ogohlantirishlar bilan har qanday hajmdagi loyihalar va jamoalar uchun javob beradi:

- Ushbu metodologiya faqat frontend uchun. Agar siz backend arxitekturasini izlayotgan bo'lsangiz, [Clean Architecture][refs-clean-architecture] ga e'tibor bering.
- Ushbu metodologiya faqatgina foydalanuvchi interfeysi ilovalari uchun. Katta komponentli kutubxona arxitekturasi uchun ilhom sifatida [Material UI][ext-material-ui] lar tavsiya etiladi.
- Agar siz FSD-da juda oddiy bir sahifali dasturni ishlab chiqayotgan bo'lsangiz, metodologiyaning afzalliklariga ehtiyoj sezilmaydi, va kodlash jarayoni sekinlashishi mumkin. Biroq, FSD oldingi ilovalar haqida standartlashtirilgan tarzda fikr yuritishga yordam beradi, shuning uchun agar sizga nima kerakligini bilsangiz, undan hatto kichik loyihalarda ham foydalaning.
- Google Cloud administrator paneli hajmidagi ulkan dasturlarda maxsus arxitekturani talab qiladi. Bu holda FSD boshlang'ich nuqtasi sifatida harakat qilishi mumkin.

Metodologiya ma'lum bir dasturlash tiliga, UI ramkasiga yoki davlat menejeriga bog'liq emas - har qanday ([ishlash namunalari][refs-examples]) ga tog'ri keladi.

Agar sizda allaqachon loyiha bo'lsa, tashvishlanmang - FSD asta-sekin joylashtirish mumkin. Jamoaga beriladigan asosiy savol: "**Kamchiliklar bormi** dasturlashda?" Agar kamchiliklar bo'lmasa o'tish shart emas. Migratsiya bo'yicha ko'rsatmalar uchun [Migratsiya][refs-migration] ga qarang.


## Asoslari {#basics}

FSD dagi dastur <mark>qatlamlardan</mark> tashkil qiladi (layers), har bir qatlam <mark>slayslardan</mark> (slices) tashkil qiladi va har bir slays <mark>segmentlardan</mark> (segments).

![themed--scheme](/img/visual_schema.jpg)

**Qatlamlar** hamma dasturlarda standartlashtirilgan va vertikal joylashkan. Bir qatlamdagi modullar faqatkina pastdagi modullar bilan aloqada bo'la oladi. Hozirda qatlamlar soni yettita (pastdan tepaga):

1. `shared` — ilova/biznesning o'ziga xos xususiyatlari bilan bog'liq bo'lmagan qayta ishlatiladigan kod.
<small>(masalan, UIKit, libs, API)</small>
2. `entities` (mantiqlar) — biznes-mantiqlar.
<small>(misol, User, Product, Order)</small>
3. `features` (fichelar) — foydalanuvchining o'zaro ta'siri, foydalanuvchiga biznes qiymatini keltiradigan harakatlar.
<small>(misol, SendComment, AddToCart, UsersSearch)</small>
4. `widgets` (vidjetlar) — mantiqlar va xususiyatlarni mustaqil bloklarga ulash uchun kompozitsion qatlam.
<small>(misol, IssuesList, UserProfile)</small>.
5. `pages` (sahifalar) — mantiqlar, xususiyatlar va vidjetlardan to'liq huquqli sahifalarni yig'ish uchun kompozitsion qatlam.
6. `processes` (protseslar, eskirgan qatlam) — bir necha sahifalarni qamrab olgan murakkab skriptlar.
<small>(misol, авторизация)</small>
7. `app` — butun dastur uchun sozlamalar, uslublar va provayderlar.

Keyin **slayslar** bor, kodni mavzu sohasiga bo'lish. Ular bir-biriga mantiqiy bog'liq bo'lgan modullarni birlashtiradi, bu kodlar bazasini boshqarishni osonlashtiradi. Dilimlar bir qatlamda boshqa bo'laklardan foydalana olmaydi, bu esa yuqori darajani ta'minlaydi [_bog'lanmalar_][refs-wiki-cohesion] (cohesion) past urovenda [_ulanmalar_][refs-wiki-coupling] (coupling).

O'z navbatida, har bir slays **segmentlarda** iborat. Bu kichik modullar bo'lib, ularning asosiy vazifasi tilim ichidagi kodni texnik maqsadiga ko'ra ajratishdir. Keng trqalgan segmentlar — `ui`, `model` (store, actions), `api` va `lib` (utils/hooks), lekin sizning slaysingizda ba'zi segmentlar bo'lmasligi mumkin, sizning ixtiyoringizda boshqalar ham bo'lishi mumkin.

:::note

Aksariyat hollarda `api` va `config` larni faqatgina shared qatlamida joylashtirish [tavsiya][ext-disc-api] etiladi

:::

## Namuna {#example}

Ijtimoiy tarmoq ilovasini ko'rib chiqing.

* `app/` router konfiguratsiyasi, global xotira va uslublarni o'z ichiga oladi.
* `pages/` ilovaning har bir sahifasi uchun marshrut komponentlarini o'z ichiga oladi, asosan, iloji bo'lsa, o'z mantig'isiz tuzadi.

Ushbu ilovaning bir qismi sifatida keling, yangiliklar lentasidagi pochta kartasini ko'rib chiqaylik.

* `widgets/` "yig'ilgan" pochta kartasini o'z ichiga oladi, mazmuni va interaktiv tugmalari mavjud bo'lib, ular orqa qismga so'rovlar kiritilgan.
* `features/` kartaning barcha interaktivligini (masalan, yoqtirish tugmasi) va ushbu interaktivlikni qayta ishlash mantiqini o'z ichiga oladi.
* `entities/` interaktiv elementlar uchun slotlari bo'lgan skelet kartasini o'z ichiga oladi. Xabar muallifini ko'rsatadigan komponent ham ushbu jildda, lekin boshqa bo'lakda.

### Afzalliklar {#advantages}

- **Bir xillik**
Kod ta'sir doirasi (qatlami), mavzu maydoni (bo'limi) va texnik maqsadi (segment) bo'yicha taqsimlanadi.
Bu arxitekturani standartlashtiradi va tushunishni osonlashtiradi.

- **Boshqariladigan mantiqni qayta ishlatish**
Arxitekturaning har bir komponenti o'z maqsadiga va taxmin qilinadigan bog'liqlik ro'yxatiga ega.
Buning yordamida **DRY** printsipiga muvofiqlik va modulni turli maqsadlar uchun moslashtirish qobiliyati o'rtasida muvozanat saqlanadi.

- **O'zgarishlarga va qayta ishlashga chidamli**
Bitta modul bitta qatlamda yoki yuqoridagi qatlamlarda joylashgan boshqa moduldan foydalana olmaydi.
Bu kutilmagan oqibatlarsiz yangi talablarni qondirish uchun ilovani alohida o'zgartirish imkonini beradi.

- **Biznes va foydalanuvchi ehtiyojlariga e'tibor qarating**
Ilovani biznes domenlariga bo'lish loyiha xususiyatlarini yaxshiroq tushunish, tuzilish va topishga yordam beradi.

## Sekin-asta amalga oshirish {#incremental-adoption}

FSD ning kuchi uning tuzilmali parchalanishidir. O'zining eng yaxshi ko'rinishida FSD sizga kodning istalgan qismi uchun joyni deyarli aniq topishga imkon beradi. Biroq, parchalanish darajasi parametrdir va har qanday jamoa uni amalga oshirish qulayligi va foyda o'rtasidagi optimal muvozanat uchun sozlashi mumkin.

Mavjud kodlar bazasini FSD ga ko'chirish bo'yicha tajriba bilan tasdiqlangan quyidagi strategiyani taklif qilamiz:

1. Keyingi qadamlarni qo'llab-quvvatlash uchun `api` va shared qatlamlarni kesib tashlang. Bu qatlamlar ingichka va sodda bo'lib chiqadi, ular shunday bo'lib qolsin.

2. Biznes bilan bog'liq barcha interfeysni olib tashlang va uni vidjetlar va sahifalar bo'ylab tarqating, hatto ular hali ham FSD qoidalarini buzadigan bog'liqliklarga ega bo'lsa ham.

3. `features` va `entities` ni ta'kidlab, parchalanish darajasini asta-sekin oshiring. Sahifalar va vidjetlarni mantiqiy yuklangan qatlamlardan sof kompozitsion qatlamlarga aylantiring.

Refaktoring jarayonida yangi yirik ob'ektlarni qo'shishdan, shuningdek, qismlarga qayta ishlashdan bosh tortish tavsiya etiladi.

[refs-clean-architecture]: https://medium.com/codex/clean-architecture-for-dummies-df6561d42c94
[ext-disc-api]: https://github.com/feature-sliced/documentation/discussions/66
[ext-material-ui]: https://github.com/mui/material-ui
[refs-examples]: /examples
[refs-migration]: /docs/guides/migration
[refs-wiki-cohesion]: https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
[refs-wiki-coupling]: https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%86%D0%B5%D0%BF%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
2 changes: 1 addition & 1 deletion i18n/uz/docusaurus-plugin-content-docs/current/intro.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ pagination_next: get-started/index

![feature-sliced-banner](/img/banner.jpg)

**Feature-Sliced Design** (FSD) — bu frontend ilovalarini loyihalash uchun arxitektura metodologiyasi. Oddiy qilib aytganda, bu kodni tashkil qilish uchun qoidalar va konventsiyalar to'plami. Metodologiyaning asosiy maqsadi loyihani tushunarli va tizimli qilishdir, ayniqsa biznes talablarining muntazam o'zgarishi sharoitida.
**Feature-Sliced Design** (FSD) — bu frontend ilovalarini loyihalash uchun arxitektura metodologiyasi. Oddiy qilib aytganda, bu kodni tashkil qilish uchun qoidalar va konventsiyalar to'plami. Metodologiyaning asosiy maqsadi biznes talablarining muntazam o'zgarishi sharoitida loyihani tushunarli va tizimli qilishdir.

import NavCard from "@site/src/shared/ui/nav-card/tmpl.mdx"
import { RocketOutlined, ThunderboltOutlined, FundViewOutlined } from "@ant-design/icons";
Expand Down