Tôi đang cố gắng xây dựng một dự án bằng kiến trúc sạch, như được mô tả ở đây . Tôi tìm thấy một bài viết tuyệt vời về cách làm điều này trong Go .
Ví dụ này rất đơn giản và tác giả đặt mã của họ vào các gói được đặt tên dựa trên lớp mà họ đang ở. Tôi thích ý tưởng của chú Bob rằng kiến trúc của một ứng dụng nên truyền đạt rõ ràng ý định của nó . Vì vậy, tôi muốn ứng dụng của mình có các gói cấp cao nhất dựa trên các vùng miền. Vì vậy, cấu trúc tập tin của tôi sẽ trông giống như thế này:
/Customers
/domain.go
/interactor.go
/interface.go
/repository.go
/... the same for other domain areas
Vấn đề với điều này là nhiều lớp chia sẻ cùng một gói. Vì vậy, không rõ ràng khi quy tắc phụ thuộc bị vi phạm, bởi vì bạn không có nhập khẩu cho thấy những gì phụ thuộc vào những gì.
Tôi đến từ nền Python, nơi điều này sẽ không gây ra nhiều vấn đề, bởi vì bạn có thể nhập các tệp riêng lẻ, do đó customers.interactor
có thể nhập customers.domain
.
Chúng ta có thể đạt được một cái gì đó tương tự trong gO bằng cách lồng các gói, để gói khách hàng chứa gói tên miền và gói tương tác, v.v. Điều này cảm thấy lộn xộn, và các gói có tên giống hệt nhau có thể gây khó chịu để đối phó.
Một lựa chọn khác là tạo nhiều gói cho mỗi vùng miền. Một cái gọi là customer_domain, một cái gọi là customer_interactor, v.v. Nhưng điều này cũng cảm thấy bẩn. Nó không phù hợp với hướng dẫn đặt tên gói của Go và có vẻ như tất cả các gói riêng biệt này nên được nhóm lại bằng cách nào đó, vì tên của chúng có tiền tố chung.
Vì vậy, những gì sẽ là một bố trí tập tin tốt cho việc này?