Saya mencoba membangun proyek menggunakan arsitektur bersih, seperti dijelaskan di sini . Saya menemukan artikel yang bagus tentang cara melakukan ini di Go .
Contohnya adalah yang sangat sederhana, dan penulis memasukkan kode mereka ke dalam paket-paket yang dinamai berdasarkan lapisan tempat mereka berada. Saya menyukai gagasan Paman Bob bahwa arsitektur suatu aplikasi harus dengan jelas mengomunikasikan maksudnya . Jadi saya ingin aplikasi saya memiliki paket tingkat atas berdasarkan area domain. Jadi struktur file saya akan terlihat seperti ini:
/Customers
/domain.go
/interactor.go
/interface.go
/repository.go
/... the same for other domain areas
Masalahnya adalah beberapa layer berbagi paket yang sama. Jadi tidak begitu jelas kapan aturan ketergantungan dilanggar, karena Anda tidak memiliki impor yang menunjukkan apa yang bergantung pada apa.
Saya berasal dari latar belakang Python, di mana ini tidak akan menjadi masalah besar, karena Anda dapat mengimpor file individual, sehingga customers.interactor
dapat mengimpor customers.domain
.
Kita bisa mencapai sesuatu yang serupa di gO dengan paket bersarang, sehingga paket pelanggan berisi paket domain dan paket interaksor, dan sebagainya. Ini terasa kikuk, dan paket yang identik namanya bisa menjengkelkan untuk dihadapi.
Pilihan lain adalah membuat beberapa paket per area domain. Satu disebut customer_domain, satu disebut customer_interactor, dll. Tapi ini terasa kotor juga. Itu tidak cocok dengan pedoman penamaan paket Go, dan sepertinya semua paket terpisah ini entah bagaimana harus dikelompokkan, karena nama mereka memiliki awalan yang sama.
Jadi apa yang akan menjadi tata letak file yang bagus untuk ini?