Seni bina Modular React
Pada seni bina modular
Apakah seni bina modular? Mari kita lihat contoh yang bukannya, dan
kami akan berusaha untuk mengubahnya. Pada akhirnya anda mungkin yakin dengan
nya
merit atau itu satu pembaziran masa yang besar.
Ini adalah senario sebenar yang saya fikirkan berkembang di tempat kerja. Nama dan butiran
tanpa nama, tetapi contoh dunia sebenar bagi konsep biasa sepatutnya menyeronokkan untuk berjalan
melalui, jika tiada yang lain.
Keperluan, dan cara mencarinya
Tapak kami mempunyai butang yang tinggal dalam pengepala tapak. Ia memaparkan bilangan
V-Bucks pengguna telah meninggalkannya, tetapi juga mempunyai beberapa logik perniagaan yang dimasukkan ke dalamnya:
- Jika ini kali pertama mereka melawat tapak, buka popover untuk mengalu-alukan mereka & tunjukkan sesuatu yang boleh mereka lakukan dengan V-Bucks mereka
- Jika mereka mempunyai < 5 V-Bucks yang tinggal, tunjukkan popover yang meningkatkan jualan lebih
- Jika mereka adalah pengguna Asas, tunjukkan satu gaya butang; jika pengguna SuperDuper, tunjukkan butang lain yang lebih menarik
Dan seterusnya. Terdapat banyak kes sedemikian, pengurus produk dan pengurus projek kami
dan pengurus reka bentuk dan Pengarah Kumpulan V-Bucks telah mengimpikan bahawa kami perlu
pegang.
Jimbo pelatih telah ditugaskan untuk melaksanakan ini kerana ia hanya
butang!
Dia meneliti lima belas lelaran bercanggah reka bentuk Figma. Dia dapati
keperluan dalam seberapa banyak dokumen Word yang berasingan kerana terdapat PM. Dia mengatur dan
menjalani tujuh sesi pemindahan pengetahuan dengan tujuh pasukan untuk mendedahkan
pengetahuan purba, proprietari tentang perkhidmatan yang akan menyediakan data yang dia perlukan
untuk jenis pengguna dan kiraan V-Bucks. Pasukan kandungan telah meyakinkannya bahawa
versi akhir semua rentetan akan diluluskan oleh undang-undang dan pemasaran pada akhir
minggu ini, dan dengan itu, dia bersedia untuk membina butang ini.
Pendekatan penggodam
Berikut ialah lelaran pertama butang V-Bucks, popover dan berkaitan
logik perniagaan.
Jimbo berpuas hati dengan struktur direktori ringkas yang dia hasilkan:
/v-bucks-button ├── button.tsx ├── index.ts └── /v-bucks-popover │ ├── popover.tsx
Jadi dia mula membina butang ini, dan butang itu bermula dengan tidak bersalah.
export const VBucksButton: React.FC<VBBProps> = ({ ... }) => { // Set up state const authConfig = { ... } const { user } = useAuth({ ...authConfig }) const { vBucks } = useGetVBucks({ user }) const { telemetry } = useTelemetry() const { t } = useTranslation('vBucksButton.content') const styles = useButtonStyles() // Derive some state via business logic const handleClick = () => { ... } const buttonText = vBucks === ERROR ? '--' : vBucks.toString(); // About 25 more lines of various button state, error handling, // conditional rendering, with comments throughout explaining // why we're showing or hiding something or other const popoverProps = { // About 200 lines of typical popover handling, // telemetry, business logic, content to display, etc } const tooltipProps = { // Another 100 lines of the same for tooltip } return ( <VBucksPopover {...popoverProps} trigger={ <Tooltip {...tooltipProps}> <button ariaLabel={t('ariaLabel')} className={` about seven-hundred classnames for responsive design, accessibility, conditional premium styles, et cetera`} onClick={handleClick}> {buttonText} </button> </Tooltip> } /> ) } <p>Dia telah melaksanakan langkah pertama padanya. VBucksPopover mempunyai kompleks<br> yang serupa logik perniagaan, pengendalian ralat, pengurusan negeri, penggayaan dan komen yang memberi alasan<br> hutang teknologi atas nama penghantaran.</p> <p>Di bawah 400 baris sahaja, butang ini sangat mudah. Walaupun popover adalah<br> lagi 500 baris spageti. Adakah benar-benar "membersihkannya" atau membelahnya<br> memberi manfaat kepada kami, atau pengguna kami, dalam apa cara sekalipun? Ia bergantung. Jika ini sahaja yang kita perlukan untuk<br> butang ini, siapa peduli. Jom teruskan!</p> <p>Tetapi dua bulan telah berlalu dan seorang PM dan pereka dari pasukan produk lain menyukai<br> butang anda dan mahukannya dalam pengepala apl mereka. Mereka mempunyai senarai <em>mudah</em>, tidak<br> tekanan daripada penghujung mereka, beberapa perubahan yang mereka mahu anda terima dan jika<br> anda boleh tolong berikan ETA pada penghujung hari untuk LT yang bagus, terima kasih:</p> <ul> <li>Kemas kini gaya butang dan teks paparan berdasarkan apl yang ditunjukkan dalam</li> <li>Tunjukkan set popover yang berbeza sama sekali, setiap apl</li> <li>Buka mod upsell standard di seluruh syarikat baharu apabila pengguna kehabisan V-Bucks, tetapi hanya di beberapa wilayah, dan hanya kepada pengguna berumur 16 tahun, dan hanya jika mereka berada di dalamnya kumpulan percubaan A</li> </ul> <p>Bolehkah Jimbo memasukkan semua fungsi baharu ini ke dalam komponen yang sama?<br><br> ya. Adakah pemisahan atau pemfaktoran semula memberi manfaat kepada pengguna atau menarik perhatian pengurus anda?<br><br> Tidak. Tetapi pemfaktoran semula mempunyai beberapa hujah yang kukuh pada tahap kerumitan ini:</p> <ul> <li>Kewarasan dev</li> <li>Kewarasan dev yang menggantikan Jimbo apabila dia PIP kerana tidak memfaktorkan semula</li> <li>Lebih banyak wakil, jadi anda melakukan yang lebih baik dari mula pada kali seterusnya</li> <li>Sesuatu untuk diblog nanti</li> </ul> <h3> Pendekatan seni bina modular </h3> <p>Akhlak Kod Bersih bermula, dan jenis dubur lain yang cukup tahu untuk<br> jawab pada Stack Overflow dengan kerap, malah datuk dan nenek anda, lihat sesuatu<br> seperti ini:</p> <ul> <li>KISS, KERING & selimut akronim lain</li> <li>Pengasingan kebimbangan</li> <li>Atomicity! Menyahganding! Onomatopoeia!</li> </ul> <p>Ini bagus, dan membantu memaklumkan percubaan Jimbo yang seterusnya. Dia tidak mendapat PIP selepas<br> semua, dan sebenarnya mendapat promo untuk penghantaran lebih awal daripada jadual dan untuk perkongsian<br> begitu banyak mesyuarat dan dokumen.<br><br> Tetapi dia lebih bijak sekarang dan belajar cara yang bagus untuk melaksanakan pepatah itu. Nampaknya<br> sesuatu seperti ini:<br> </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">/v-bucks-button ├── button.tsx ├── index.ts └── /v-bucks-popover │ ├── popover.tsx
Kelihatan banyak plat dandang untuk butang dan popover. Mengapa ini
lebih baik?
Ia bergantung. Berikut ialah gambaran ringkas Jimbo dengan rasional:
- Pisah setiap komponen ke dalam bekas dan pemapar
- Alihkan logik keadaan dan perniagaan ke dalam cangkuk
- Bekas menggunakan cangkuk dan menghantar mana-mana prop kepada pemapar
- Penyaji hanya mementingkan penyampaian perkara yang disediakan
- Kefungsian biasa, logik perniagaan atau pemalar boleh hidup dalam kegunaan
- Asingkan fail untuk jenis; mereka cenderung untuk diimport dalam berbilang fail dan menjadi deps bulat yang anda perlu keluarkan juga
- TailwindCSS yang diekstrak -- lebih lanjut mengenai perkara ini di bawah
Ia boleh berskala tak terhingga! Blok bangunan ini tidak dipecahkan oleh
peraturan sewenang-wenangnya seperti baris kod atau "kerumitan". Mereka dipecahkan oleh
tujuan: setiap sempadan konsep mempunyai satu tujuan.
Seorang PM mahu anda membuat 10 popover baharu? Tiada masalah -- seni bina Jimbo boleh
uruskannya.
Kepimpinan mahukan metrik jualan yang lebih baik dalam sesetengah apl, tetapi pasukan lain tidak
mempunyai pembiayaan untuk membina telemetri untuk menyokong ini. Hebat! Kami ada
telemetri utils yang kita boleh skala mendatar untuk memenuhi pelbagai, berubah
keperluan.
Reka bentuk semula yang menyeluruh bermakna setiap popover perlu memaparkan bahan yang berbeza,
berdasarkan syarat yang berbeza. Ia biasanya jauh lebih mudah sekarang kerana semua
bahan yang kami berikan, dan semua logik yang kami gunakan untuk menjadikannya, wujud dalam yang jelas
blok. Mereka tidak lagi bercampur dalam timbunan konflik dan logik yang besar
rantai sepanjang 20 baris.
Berikut ialah contoh bekas / corak pemapar ini:
/v-bucks-button ├── button.tsx ├── index.ts └── /v-bucks-popover │ ├── popover.tsx
export const VBucksButton: React.FC<VBBProps> = ({ ... }) => { // Set up state const authConfig = { ... } const { user } = useAuth({ ...authConfig }) const { vBucks } = useGetVBucks({ user }) const { telemetry } = useTelemetry() const { t } = useTranslation('vBucksButton.content') const styles = useButtonStyles() // Derive some state via business logic const handleClick = () => { ... } const buttonText = vBucks === ERROR ? '--' : vBucks.toString(); // About 25 more lines of various button state, error handling, // conditional rendering, with comments throughout explaining // why we're showing or hiding something or other const popoverProps = { // About 200 lines of typical popover handling, // telemetry, business logic, content to display, etc } const tooltipProps = { // Another 100 lines of the same for tooltip } return ( <VBucksPopover {...popoverProps} trigger={ <Tooltip {...tooltipProps}> <button ariaLabel={t('ariaLabel')} className={` about seven-hundred classnames for responsive design, accessibility, conditional premium styles, et cetera`} onClick={handleClick}> {buttonText} </button> </Tooltip> } /> ) }
/vBucksButton ├── /hooks │ ├── index.ts │ └── useButtonState.hook.ts ├── /vBucksPopover │ ├── /app1Popover │ │ ├── /hooks │ │ │ ├── index.ts │ │ │ └── usePopoverState.hook.ts │ │ ├── ... │ ├── /app2Popover │ ├── index.ts │ ├── popover.renderer.tsx │ ├── popover.styles.ts │ ├── popover.tsx │ └── popover.types.ts ├── /utils │ ├── experimentation.util.ts │ ├── store.util.ts │ ├── telemetry.util.ts │ └── vBucks.businessLogic.util.ts ├── button.renderer.tsx ├── button.styles.ts ├── button.tsx ├── button.types.ts └── index.ts
Ketepikan: Dokumen TailwindCSS secara jelas mengesyorkan agar tidak menggunakan @apply untuk mengekstrak kelas biasa seperti ini. Ini menyebabkan perbezaan hampir sifar dalam saiz berkas, dan tiada perbezaan lain selain daripada "anda perlu menghasilkan nama kelas." CSS gred pengeluaran hampir selalu berakhir dengan berpuluh-puluh baris panjang, didarab dengan walau bagaimanapun banyak elemen memerlukan penggayaan dalam komponen tertentu. Pertukaran ini nampaknya berbaloi 90% pada setiap masa.
Dan selebihnya logik perniagaan sedia ada dan baharu, kekal dalam mata kail & kegunaan!
Seni bina baharu ini memuaskan hati peminat dan menjadikan perkara lebih mudah untuk skala atau
padam atau gerakkan.
Menulis ujian unit menjadi kurang menyakitkan kerana anda mempunyai
yang jelas
sempadan. Penyampai anda tidak perlu lagi mengejek sepuluh perkhidmatan yang berbeza untuk
sahkan bahawa ia menunjukkan beberapa set kilauan yang diberikan beberapa input. Mata kail anda boleh
menguji, secara berasingan, bahawa ia sepadan dengan logik perniagaan yang anda inginkan.
Adakah seluruh lapisan keadaan anda baru sahaja berubah? Sungguh memalukan jika kod dalam
anda
cangkuk telah digabungkan dengan kod yang menggunakannya, tetapi kini ia lebih ringkas
tukar dan pemapar anda masih hanya mengharapkan input.
Fikiran akhir
Seni bina modular ini menambahkan banyak boilerplate dan akhirnya boleh memberikan
faedah sifar.
Saya tidak boleh mengesyorkannya secara praktikal jika anda sedang mengusahakan projek semangat atau
utamakan penghantaran & memberikan nilai di atas segalanya. Jika anda mempunyai sesuatu yang
nampaknya skop ini mungkin berkembang dari semasa ke semasa atau anda mungkin mahu
baik pulih sepenuhnya selepas POC, ia boleh mengurangkan hutang teknologi... kadangkala.
Anda boleh menggunakan alatan seperti Plop untuk menjana boilerplate ini.
Jadi, apakah yang saya pelajari daripada karya Jimbo & seni bina modular?
Kod Bersih dan akronim yang kami pelajari di sekolah dan Well Ackshuallys dunia
adalah satu hujung spektrum. Menggodam bersama kod spageti berfungsi adalah satu lagi
berakhir, dan selalunya berfungsi dengan baik, kerana akhirnya semua kod adalah hutang teknologi.
Penyelesaian terbaik wujud dalam beberapa keadaan kuantum atau gabungan hujung ini, dan
jalan yang kita pilih mungkin akan diputuskan berdasarkan:
- Sejauh mana kita mengambil berat tentang perkara yang sedang kita bina
- Kekerapan pengurusan meminta kemas kini dan ETA
- Membaca sesuatu seperti ini dan satu pendekatan berlaku kepada anda kesedaran apabila anda membina perkara seterusnya
- Kekecewaan, kesakitan
- Spaghetti menjadi hambatan hebat sehingga anda terpaksa menulisnya semula
- Pelat dandang menjadi sangat longkang sehingga anda memotong sudut
Atas ialah kandungan terperinci Seni bina Modular React. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.
