Quản lý thư mục trong Rails app

Đăng bởi Lưu Đại vào ngày 18-12-2022

Quản lý thư mục trong Rails app để làm gì khi mà Rails đã có sẵn cấu trúc thư mục?

Rails có sẵn một cấu trúc thư mục rất rõ ràng
  • models để lưu những objects mô phỏng bảng trong database và logic tương tác với database, ngoài database như mysql, postgresql nó còn có thể sử dụng để đại diện cho các object trong redis.
  • controller để định nghĩa api những logic tương tác giữa view và models
  • view để lưu những file hiển thị (html, css, slim, …)
  • db tất cả mọi thứ về thêm mới bảng, update cấu trúc bảng hay thêm index vào cho bảng. 
  • lib là nơi đặt tất cả thư viện mà dự án sử dụng trong này. Như có thể viết custom riêng một thư viện cho việc kết nối tới hệ thống bên thứ 3. 
Rất là rõ ràng trong quá trình làm dự án, đối với những dự án nhỏ độ phức tạp không cao thì cấu trúc thư mục mặc định của Ralls có thể đáp ứng được. 
Với những dự án mình từng làm có độ phức tạp cao hơn và yêu cầu Spec khó hơn thì các thư mục mặc định trong Rails không còn đáp ứng được nữa hoặc do trình độ của mình =)))) 

Research về các cách sắp xếp thư mục trong Rails

  • Cách 1: Sắp xếp thư mục trong Rails theo design pattern
    Cách này khá đơn giản chỉ cần sắp xếp độ phức tạp theo tên design pattern. Ví dụ nếu áp dụng decorator vào ứng dụng thì có thể thêm thư mục app/decorators. Ứng dụng thường thấy nhất mình từng làm là thư mục app/services aka Service Object dùng để lưu những logic nghiệp vụ. 
    Tuy nhiên lại có những bài viết đưa ra dẫn chứng cách làm này khó có thể tìm được code. Mình nghĩ là vì số lượng design pattern quá nhiều một đoạn logic code có thể được hiểu theo những cách khác nhau và khi tìm lại thì người ta sẽ phân vân không biết là nên đặt đoạn code đó ở đâu. 
  • Cách 2: Sắp xếp thư mục theo ý nghĩa 
    Cách này sẽ quản lý thư mục theo định nghĩa cho từng khu vực trong app. Các dự án mình làm thường dùng cách này trong controllers để chia logic ra. Vd: controllers/admin/games_controller.rb
    models/redis/player.rb
    Cách này sẽ tìm đoạn code mà mình muốn sửa hơn.