Tóm lược
Như JacquesB viết, không phải ai cũng đồng ý với "Mã sạch" của Robert C. Martin.
Các dự án nguồn mở mà bạn thấy là "vi phạm" các nguyên tắc mà bạn mong đợi có thể chỉ đơn giản là có các nguyên tắc khác.
Góc nhìn của tôi
Tôi tình cờ giám sát một số cơ sở mã tuân thủ rất nhiều nguyên tắc của Robert C. Martin. Tuy nhiên, tôi không thực sự cho rằng họ đúng , tôi chỉ có thể nói họ làm việc tốt cho chúng tôi - và thực tế là "chúng tôi" là sự kết hợp của ít nhất
- phạm vi và kiến trúc của các sản phẩm của chúng tôi,
- thị trường mục tiêu / kỳ vọng của khách hàng,
- Bao lâu các sản phẩm được duy trì,
- phương pháp phát triển chúng tôi sử dụng,
- cơ cấu tổ chức của công ty chúng tôi và
- thói quen, ý kiến và kinh nghiệm trong quá khứ của các nhà phát triển của chúng tôi.
Về cơ bản, điều này tập trung vào: mỗi nhóm (có thể là một công ty, một bộ phận hoặc một dự án nguồn mở) là duy nhất. Họ sẽ có những ưu tiên khác nhau và quan điểm khác nhau, và tất nhiên họ sẽ thực hiện những sự đánh đổi khác nhau. Những sự đánh đổi này, và kiểu mã mà họ tạo ra, phần lớn là vấn đề của hương vị và không thể được chứng minh là "sai" hay "đúng". Các đội chỉ có thể nói "chúng tôi làm điều này vì nó hiệu quả với chúng tôi" hoặc "chúng tôi nên thay đổi điều này vì nó không hiệu quả với chúng tôi".
Điều đó nói rằng, tôi tin rằng để có thể duy trì thành công các cơ sở mã lớn trong nhiều năm, mỗi nhóm nên thống nhất một bộ quy ước mã mà họ cho là phù hợp với các khía cạnh nêu trên. Điều đó có thể có nghĩa là áp dụng các thực hành của Robert C. Martin, bởi một tác giả khác, hoặc phát minh ra của họ; nó có thể có nghĩa là viết chúng xuống chính thức hoặc ghi lại chúng "bằng ví dụ". Nhưng chúng nên tồn tại.
Thí dụ
Hãy xem xét thực tiễn "tách mã từ một phương thức dài thành một số phương thức riêng".
Robert C. Martin nói rằng phong cách này cho phép hạn chế nội dung của từng phương pháp để một mức độ trừu tượng - như một ví dụ đơn giản, một phương pháp nào có lẽ chỉ bao gồm các cuộc gọi đến các phương pháp cá nhân như verifyInput(...)
, loadDataFromHardDisk(...)
, transformDataToJson(...)
và cuối cùng sendJsonToClient(...)
, và các phương pháp này sẽ có các chi tiết thực hiện.
- Một số người thích điều này bởi vì độc giả có thể có được cái nhìn tổng quan nhanh về các bước cấp cao và có thể chọn chi tiết nào họ muốn đọc.
- Một số người không thích nó bởi vì khi bạn muốn biết tất cả các chi tiết, bạn phải nhảy xung quanh trong lớp để theo dõi quá trình thực thi (đây là những gì JacquesB có thể đề cập đến khi ông viết về việc thêm độ phức tạp).
Bài học là: tất cả chúng đều đúng, bởi vì chúng có quyền có ý kiến.