Repo ini adalah contoh cara mencapai arsitektur bersih di Next.js. Ada tutorial video yang melewati proyek ini. Klik gambar untuk memeriksanya di YouTube:
Anda dapat menjalankan proyek hanya dengan menjalankan npm install dan npm run dev .

Catatan
? Saya menggambar versi sederhana dari diagram arsitektur bersih asli ini. Saya menyederhanakannya dengan cara yang lebih masuk akal bagi saya, dan lebih mudah dipahami. Saya harap ini membantu Anda juga.
Saya sangat menyarankan Anda untuk membaca artikel asli oleh Paman Bob jika ini adalah pertama kalinya Anda mendengar tentang arsitektur bersih, tetapi saya akan mencoba meringkasnya untuk Anda di bawah ini.
Arsitektur yang bersih adalah seperangkat aturan yang membantu kami menyusun aplikasi kami sedemikian rupa sehingga lebih mudah dipelihara dan diuji, dan basis kode mereka dapat diprediksi. Ini seperti bahasa umum yang dipahami pengembang, terlepas dari latar belakang teknis dan preferensi bahasa pemrograman mereka.
Arsitektur bersih, dan arsitektur serupa/turunan, semuanya memiliki tujuan yang sama - pemisahan kekhawatiran . Mereka memperkenalkan lapisan yang menggabungkan kode serupa bersama -sama. "Layering" membantu kita mencapai aspek -aspek penting dalam basis kode kita:
Arsitektur yang bersih mencapai hal ini melalui mendefinisikan hierarki ketergantungan - lapisan hanya bergantung pada lapisan di bawahnya , tetapi tidak di atas.
app - Lapisan Kerangka & Pengemudi - Pada dasarnya semuanya selanjutnya.js (halaman, tindakan server, komponen, gaya dll ...) atau apa pun "mengkonsumsi" logika aplikasidi - Injeksi Ketergantungan - Folder tempat kami mengatur wadah DI dan moduldrizzle - Semuanya DB - Menginisialisasi Klien DB, Menentukan Skema, Migrasisrc - "root" sistemapplication - Lapisan Aplikasi - Memegang Kasing dan Antarmuka Penggunaan untuk Repositori dan Layananentities - Entitas Lapisan - Memegang model dan kesalahan khususinfrastructure - Lapisan Infrastruktur - Memegang implementasi repositori dan layanan, dan menarik antarmuka dari applicationinterface-adapters - Antarmuka Adapter Layer - Memegang pengontrol yang berfungsi sebagai titik masuk ke sistem (digunakan dalam Frameworks & Driver Layer untuk berinteraksi dengan sistem)tests - Tes Unit Langsung Di Sini - Struktur Subfolder unit cocok dengan src.eslintrc.json - di mana plugin eslint-plugin-boundaries didefinisikan - ini menghentikan Anda dari melanggar aturan ketergantunganvitest.config.ts - perhatikan bagaimana @ alias didefinisikan! User yang mendefinisikan bidang nama pengguna yang harus memiliki setidaknya 6 karakter dan tidak termasuk karakter khusus .catch kesalahan yang datang dari perpustakaan lain (misalnya gerimis), dan mengubah kesalahan itu menjadi kesalahan kami sendiri.getTodo , atau createTodo , atau updateTodo . Ini berarti bahwa kami hanya menggunakan pustaka / driver database di kelas -kelas ini. Mereka tidak melakukan validasi data apa pun, cukup jalankan kueri dan mutasi terhadap database dan baik melemparkan kesalahan yang ditentukan khusus atau hasil pengembalian.di . Kami "mengikat" repositori, layanan, pengontrol, dan menggunakan kasus untuk simbol, dan kami "menyelesaikan" mereka menggunakan simbol -simbol itu ketika kami membutuhkan implementasi yang sebenarnya. Begitulah cara kami dapat menggunakan implementasi, tanpa perlu secara eksplisit bergantung padanya (impor). Tip
Jika Anda memiliki pertanyaan yang tidak dicakup oleh FAQ, jangan ragu untuk membuka masalah dalam repo ini, atau bergabung dengan server Discord saya dan memulai percakapan di sana.
Ya! Anda dapat menggunakannya dengan router halaman, router aplikasi, middleware, penangan API, tindakan server, apa pun! Biasanya, mencapai injeksi ketergantungan dalam proyek JavaScript sedang dilakukan dengan perpustakaan inversify.js, yang tidak sesuai dengan runtime lainnya kecuali node. Proyek ini mengimplementasikan Ioctopus, wadah IOC sederhana yang tidak bergantung pada reflect-metadata dan bekerja pada semua runtime.
Saya akan mengatakan tidak . Jika Anda memulai proyek baru, saya menyarankan Anda untuk fokus untuk mencapai status MVP secepat mungkin (sehingga Anda dapat memvalidasi ide Anda / melihat apakah ada masa depan untuk proyek Anda). Ketika hal -hal mulai serius (lebih banyak fitur mulai diterapkan, basis pengguna Anda mengalami pertumbuhan yang signifikan, atau Anda sedang melakukan pengembang lain dalam proyek Anda), saat itulah Anda ingin menginvestasikan waktu untuk mengadaptasi arsitektur ini (atau arsitektur apa pun dalam hal ini).
Jika Anda sudah jauh di dalam gulma pada proyek, Anda (dan tim Anda) dapat merencanakan refactoring bertahap mulai dari sprint berikutnya. Dalam hal ini Anda sudah memiliki kode yang ditulis, Anda hanya perlu menata ulang sedikit, dan Anda dapat melakukan bagian berdasarkan bagian, route handler dengan rute handler, aksi server dengan tindakan server. Ngomong -ngomong, saya katakan dengan ringan "Anda hanya perlu menata ulang sedikit" , tetapi itu bisa jauh dari sesederhana itu. Selalu memperhitungkan "hal -hal yang salah" ketika Anda merencanakan refactoring. Dan luangkan waktu untuk menulis tes!
Jika Anda tidak menghabiskan lebih dari 3 menit untuk memikirkan hal ini, maka ya, itu memang terlihat seperti rekayasa berlebihan. Tetapi jika Anda melakukannya, Anda akan menyadari bahwa arsitektur = disiplin . Arsitekturnya adalah kontrak antara pengembang yang mendefinisikan apa yang pergi ke mana. Ini sebenarnya menyederhanakan pengembangan fitur karena membuat basis kode dapat diprediksi, dan itu membuat keputusan itu untuk Anda.
Anda tidak dapat menumbuhkan proyek secara berkelanjutan jika setiap pengembang yang mengerjakannya menulis kode di mana itu yang paling nyaman. Basis kode akan berubah menjadi mimpi buruk untuk dikerjakan, dan saat itulah Anda akan merasakan proses pengembangan fitur yang sangat rumit. Untuk melawan ini, akhirnya Anda akan meletakkan beberapa aturan. Aturan -aturan itu akan tumbuh saat tim Anda menghadapi dan memecahkan masalah baru. Masukkan semua aturan itu dalam dokumen, dan ada definisi arsitektur Anda sendiri. Anda masih menerapkan semacam arsitektur, Anda baru saja mencapai titik itu dengan sangat lambat dan menyakitkan.
Arsitektur yang bersih memberi Anda jalan pintas dan arsitektur yang telah ditentukan yang telah diuji. Dan ya, tentu saja, Anda perlu mempelajari semua ini, tetapi Anda melakukannya sekali di masa hidup Anda, dan kemudian cukup terapkan prinsip -prinsip dalam bahasa atau kerangka apa pun yang akan Anda gunakan di masa depan.
TIDAK . Tidak jika Anda tidak mengharapkan proyek tumbuh, baik dalam jumlah fitur, atau jumlah pengguna, atau jumlah pengembang yang mengerjakannya.
Seperti yang disebutkan dalam posting blog asli yang saya sebutkan di bagian atas readme, Anda dapat: