Solidus Adminland
Ini adalah tahap pra-alfa dan dapat diubah di masa mendatang.
Ini dimulai sebagai proyek yang menyenangkan untuk tujuan internal untuk membuat versi panel admin solidus_backend yang lebih andal. Solidus memiliki komponen inti yang hebat dan antarmuka admin yang dilengkapi baterai, tetapi menurut pendapat kami dan karena penyesuaian kami, permata admin tidak memiliki struktur desain untuk menjadi infrastruktur sampingan nyata untuk berkomunikasi dengan struktur solidus_core.
Fitur
- Cantik dan mudah digunakan (UX penting)
- Hotwire Turbo bertenaga ⚡️
- Stimulus dengan peta impor untuk kilauan kecil
- Pemfilteran menjadi mudah dengan Ransack
- Operasi batch seperti penghancuran
Mengapa menulis ulang roda?
Seperti yang dikatakan, menurut pendapat kami, solidus_backend menyampaikan begitu banyak peringatan karena terjebak di perpustakaan, memilih kembali ke garpu foya (Deface aku melihatmu!) dan struktur ini terlalu ketat untuk pilihan tersebut:
- Begitu banyak filter dengan ransack yang berantakan dengan intisari parameter khusus
- Penggunaan cancan dengan 'makro' (:manage, :admin) dan bukan dengan rute CRUD yang sebenarnya dan tidak berpegang pada konvensi pola MVC.
- Pengeditan produk, pesanan, dan promosi mengandalkan ajax dengan tulang punggung dan bukan pada perilaku CRUD yang lebih konvensional.
- Tidak "benar-benar" kompatibel dengan turbo: Turbolinks dikembangkan dalam hotwire dan penggunaan saat ini hanya cuplikan untuk eksekusi skrip javascript yang benar.
- Banyaknya penggunaan eksekusi jarak jauh javascript dari Rails-ujs dan 'remote: true' alih-alih respons html yang lebih bersih dan dapat diprediksi dengan turbo. Menurut saya, remote bukanlah pendekatan yang baik karena ia memasukkan kode javascript ke konsol browser dengan harapan dapat dieksekusi dan, bagi saya, merupakan potensi ancaman keamanan lintas skrip.
Seperti yang Anda lihat, solidus_admin sudah cukup tua dan untuk perombakan solidus_frontend dengan solidus_starter_frontend, inilah waktunya untuk eksperimen dan pembaruan besar-besaran!
Apakah Anda mencoba membuat permata solidus_backend baru?
Semacam tapi Tidak . Saya memulai ini sebagai proyek alternatif pertama-tama karena ini adalah proyek alfa dan tujuannya untuk ditawarkan, bersama dengan backend yang dilengkapi baterai dengan kopling rendah dengan kerangka rel, tetapi juga kerangka kerja Adminland yang cukup terstruktur untuk kemampuan perluasan dan penyesuaian UI tanpa hambatan. . Saya ingin membuatnya lebih mengandalkan perpustakaan yang dipilih dari pemilik proyek host, sebagai integrasi yang mudah tanpa terlalu ketat.
Oke, jadi apa pilihanmu? Apakah pendapat Anda juga masuk akal?
Saya rasa kita dapat memikirkan struktur kode adminland untuk mengikuti dasar-dasar ini:
- Mudah untuk ditimpa dan diperluas dengan pendekatan override/monkey-patch yang lebih sedikit. Kami adalah manusia, bukan monyet!
- Larangan sebelumnya untuk Deface. Saya tidak pernah menyukai pendekatan deface dan menurut saya lebih baik menganggap UI sebagai modular sejak awal, sebagai alternatif mengesampingkan tampilan dengan menyalin tetapi tidak dengan menambal dan menyuntikkan. Untuk perluasan alat sespan lainnya (semua ekstensi solidus dengan bagian admin), saya lebih suka membuat titik awal yang lebih jelas dan terbuka.
- Ketat untuk rute CRUD. Semuanya harus bergantung pada rute CRUD seketat mungkin, begitu juga untuk pendekatan rute bersarang, yang mendukung pendekatan konvensi dibandingkan pendekatan konfigurasi.
- Tambahkan sumber daya eksternal dari aplikasi hosting Rails dengan templat perancah generator.
Dengan pemikiran ini saya mulai memberikan beberapa pilihan untuk proyek solidus_adminland 'baru' seperti:
- hotwire secara default dan mendorong lebih dari sekadar pendekatan manipulasi js DOM.
- stimulus untuk penambahan yang sederhana dan andal seperti picker, input mask, dan validasi formulir
- penggunaan permata view_component untuk merangkum metode pembantu dengan hasil HTML (seperti link_to atau yang lebih kompleks). Lebih mudah juga untuk tujuan penggantian, sebagai alternatif dari parsial untuk keandalan dan kelas PORO untuk logika UI
- Setiap impor aset dilakukan dengan rails-importmap untuk 'tidak ada pendekatan aplikasi yang berpusat pada javascript'
- Penggunaan permata administrasi untuk pembagian perhatian antara representasi (dengan *kelas Dasbor) dan rute CRUD untuk data yang akan ditampilkan atau dikirimkan
- Setiap formulir ditata oleh FormBuilder di mana setiap bidang dirender dengan kelas Komponen terpisah. Jika di feature kita atau ada yang ingin meletakkan field aneh seperti Dropdown JS bisa dibuat dengan Admininstrate::Field, FormBuilder::Component baru dan stimulus untuk js Sparkle ?
- Untuk kebijakan saya pikir kita bisa membuat pendekatan hybrid agar kompatibel dengan cancan tetapi dengan pendekatan pudit yang lebih mudah. Dalam kasus kami, kami menggunakan permata action_policy. Ini bergantung pada objek PORO di mana kita dapat menentukan untuk setiap tindakan aturan apa yang harus dilakukan. Ini adalah bagian tengah yang nyata bagi pengontrol untuk kebijakan kontrol atas 'cakupan rekaman', 'param yang diizinkan rekaman' dan 'rute yang dapat diakses rekaman'.
Seperti yang Anda lihat, untuk setiap sumber daya terdapat:
- Kontroler dengan nama yang sama untuk operasi CRUD standar
- Dasbor dengan nama yang sama untuk indeks, formulir_baru, edit_form, dan tampilkan parameter yang akan ditampilkan
- Kebijakan untuk cakupan mana yang dapat saya akses dengan pengguna saat ini, parameter mana yang dapat saya kirimkan, dan rute mana yang diizinkan untuk sumber daya itu.
... dan sebagai pendekatan 'konvensional' Anda bisa membuat sendiri (atau memperluas) ketiganya dan menempatkan logika bisnis sesuai keinginan Anda (atau permintaan aplikasi Anda)!
Desain awal dibuat dengan bootstrap 5 dengan Tabler tetapi Anda dapat dengan mudah mengganti tampilan standar dari admin/aplikasi untuk CRUD. Jumlah penayangan akan dijaga serendah mungkin
Peta jalan
Semua hak logo dan warna didapat dari solidus presskit. Tema Admin terinspirasi dari mockup situs web solidus dan berdasarkan Tabler versi Bootstrap 5