Các thư mục 'mối quan tâm' ngẫu nhiên và các tệp '.keep'


87

Tôi đang học đường ray.

Ở đâu đó, tôi nhận thấy rằng các thư mục và tệp dường như ngẫu nhiên đang xuất hiện trong thư mục ứng dụng rails của tôi. Trong một số thư mục có một concernsthư mục chứa .keeptệp bên trong nó. Các .keeptập tin có vẻ như trống. Trong các thư mục khác không có concernsthư mục nhưng có .keeptệp trống .

Có ai biết thỏa thuận với các tệp / thư mục này là gì không?

Câu trả lời:


132

.keeptệp là tệp 0 byte ở đó để ngăn các thư mục trống bị bỏ qua bởi tất cả các loại quy trình. Không có gì phải lo lắng về.


2
cảm ơn rất nhiều! Vậy tôi có nên bỏ chúng không? Tôi đã đi để xóa chúng nếu chúng không cần thiết
Alex Vallejo

5
Có, bạn nên giữ chúng xung quanh để chúng có mặt khi bạn cần. Nó cũng sẽ đảm bảo các thư mục được hệ thống kiểm soát phiên bản của bạn chú ý.
Josh,

Tôi có nên đặt chúng trong của tôi .gitignore? Tôi không muốn cam kết các tệp trống.
tbodt

7
@tbodt Tôi sẽ cam kết chúng. Không chắc điều gì sẽ xảy ra nếu ai đó sao chép codebase của bạn.
DickieBoy

33

Các tệp .keep đặc biệt hữu ích khi bạn muốn tạo các thư mục trống bằng git.

Thực tế thú vị, tên .keephoặc .gitkeeplà vô nghĩa. bạn có thể gọi tệp .foocho cùng một hiệu ứng, nó chỉ là một quy ước có thể đọc được.

Các .keeptệp cũng ở đó để hỗ trợ việc chuyển từ vcs này sang vcs khác, ngăn chặn việc xóa các thư mục quan trọng khi bạn hủy hợp nhất một cái gì đó có thể làm cho các thư mục đó bị trống.

Ví dụ: hãy xem xét một tập lệnh cố gắng truy cập cd dirvào một thư mục không được theo dõi bởi git.

Đó là một mô hình thiết kế phần mềm tìm cách giảm số lượng các quyết định mà các nhà phát triển cần phải thực hiện, đạt được sự đơn giản, nhưng không nhất thiết làm mất đi tính linh hoạt.


6

Mối quan tâm là một khái niệm đơn giản nhưng mạnh mẽ. Nó tồn tại để tái sử dụng mã. Về cơ bản, ý tưởng là trích xuất các đoạn mã phổ biến và / hoặc theo ngữ cảnh cụ thể để làm sạch các mô hình và tránh chúng trở nên quá béo và không thể quản lý được.

Tôi muốn chỉ định rõ ràng rằng bạn nên sử dụng các đối tượng dịch vụ để cung cấp chức năng không phải là mối quan tâm của đối tượng cụ thể. Ví dụ: một tổ chức có nhiều người dùng. Bây giờ, quản trị viên của tổ chức cần xuất CSV của tất cả người dùng cho tổ chức này. Mã này có thể được đặt trong mô hình tổ chức nhưng vì nó không phải là trách nhiệm của đối tượng tổ chức, mã này phải được đặt trong một lớp mà bạn chỉ cần chuyển đối tượng tổ chức và nó trả về CSV của tất cả người dùng.

 class Services::GenerateCsv
     def self.get_users org
         #add logic the fetch users for the org and generate the CSV and return the CSV data
     end
 end

Bất cứ khi nào bạn cần tạo CSV, u có thể đặt logic đó trong lớp trên. Cách tiếp cận này giữ cho đối tượng (trong trường hợp này là mô hình tổ chức) sạch sẽ khỏi mã không phải là trách nhiệm của nó. Một nguyên tắc chung mà tôi tuân theo là: nếu mã đang sửa đổi đối tượng self, hãy chuyển mã sang đối tượng dịch vụ.

Lưu ý: Câu hỏi của bạn liên quan đến các mối quan tâm nhưng tôi đã nghĩ đến việc thêm một số thứ bổ sung mà tôi làm theo để giữ cho cơ sở mã sạch và dễ quản lý vì nó có thể giúp ích cho các lập trình viên. Đó là cách tiếp cận trên là tranh luận.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.