Có bất kỳ tác dụng phụ tiêu cực của việc tách các mô-đun lớn? [đóng cửa]


21

Tôi đang duyệt một dự án github và tìm thấy mô-đun này có hơn 10 nghìn dòng.

Đây có phải là một thực tế phổ biến để có nhiều mã trong một mô-đun không?

Dường như với tôi rằng điều này nên được chia thành nhiều mô-đun. Có lẽ một cho mỗi công cụ db.

Nhà phát triển có được lợi ích gì từ việc tạo ra một mô-đun lớn như thế này (ngoài việc "có tất cả ở một nơi") hoặc có nhược điểm gì khi tách nó ra (ngoài "sự phức tạp")?


Không phải 8k dòng - chắc chắn!
BЈовић 15/03/2016

4
Nó không phải là kích thước của mô-đun, đó là cách bạn sử dụng nó ...
jmq

4
Các chương trình được con người đọc và chỉ tình cờ để máy tính thực thi - Donald Knuth.
Mahmoud Hossam

1
Một mô-đun / mô hình con được cho là để làm một việc cụ thể. Một mô-đun (ngớ ngẩn) để thêm 2 số trong Python sẽ chỉ có 2 dòng. Một mô-đun để làm một cái gì đó phức tạp hơn chắc chắn sẽ lớn hơn. Tôi nói hạn chế mô-đun / mô hình con chỉ một chức năng. Kepp đó là điểm chuẩn của bạn.
c0da

Cho đến nay, điểm quan trọng hơn đối với mã hướng đối tượng là có cấu trúc lớp được tổ chức tốt với sự tách biệt các mối quan tâm và độ khô cực độ. Tách mô-đun sau đó là phần dễ dàng.
Acumenus

Câu trả lời:


14

Những gì bạn gặp phải là cái gọi là " đối tượng của Chúa ", bởi vì nó làm tất cả hoặc biết tất cả. Chạy khỏi nó (nếu bạn có thể).

Không có số lượng xác định LỘC trên mỗi mô-đun, nhưng nó phải là thứ giúp bạn dễ dàng duyệt mã và dễ dàng hiểu các phương thức đang làm gì. Từ kinh nghiệm cá nhân của tôi, nếu mô-đun của bạn vượt quá 1k dòng * , bạn đang làm sai điều gì đó.

* Ngay cả một mô-đun dòng 1k là rất lớn.


9
Ví dụ đưa ra không phải là một đối tượng của Đức Chúa Trời , nó thực sự là một hệ thống phân cấp toàn bộ lớp, kể cả đó là doctest , mà chỉ xảy ra được trong một file py duy nhất. Điều này có thể không lý tưởng, nhưng có những lý do thực tế mà bạn có thể muốn làm điều này và như BillThor gợi ý, bản thân mã được cấu trúc khá hợp lý. Nó chắc chắn không phù hợp với định nghĩa cổ điển về Đối tượng Thần , chỉ là một công việc có công việc khá phức tạp phải làm và cần phải thích nghi với một số tình huống khác nhau.
Đánh dấu gian hàng

6

Đây dường như là một mô-đun nơi giới hạn kích thước điển hình có thể không được áp dụng. Phần lớn các chức năng là trong các dòng mã và bình luận 2k đầu tiên. Phần còn lại của tệp dường như có rất nhiều lớp bộ điều hợp và các lớp hỗ trợ khác dường như được gắn chặt với mô-đun. Trong các ngôn ngữ khác, các lớp sẽ ở trong các tệp riêng biệt có kích thước hợp lý.

Một số chuỗi doc có thể hữu ích, nhưng chúng sẽ tăng kích thước của một mô-đun đã lớn. Các mã rõ ràng và tự giải thích với ý kiến ​​thích hợp khi cần thiết.


5

Tất nhiên, "giới hạn" thực tế khác nhau tùy theo dự án của bạn và vô số yếu tố.

Nhưng tôi kêu gọi với một quy tắc ngón tay cái: 200 dòng Python tốt. Đó là, không có mã C hoặc Java được viết bằng Python, nhưng Python tốt bằng Python.


1

Tôi đoán tôi không biết câu trả lời đầy đủ cho câu hỏi này, nhưng tôi thích suy nghĩ như một câu trả lời cho câu hỏi tiêu đề "Mô-đun Python nên lớn đến mức nào?" như khái niệm về Parnas, ẩn giấu một bí mật. Trong trường hợp này, mô-đun dường như làm điều đó đúng (và đó là một bí mật lớn mà nó che giấu).

Sau đó tôi đã đào sâu vào các bài báo nói về rất nhiều vấn đề liên quan đến sự gắn kết và sự gắn kết. Có thể có nhiều mô-đun db sẽ buộc quá nhiều cuộc gọi giữa các mô-đun dẫn đến tăng những gì được coi là thực tiễn xấu, đó là, sự gắn kết thấp hơn và khớp nối cao hơn?

Tôi đã thấy dữ liệu thử nghiệm nói về các lập trình viên quyết định hy sinh thực hành tốt vì đơn giản và hiểu biết mặc dù có bất cứ điều gì thực hành tốt. Trên thực tế, có thể có một cuộc xung đột giữa các thực tiễn tốt. Nói, hiệu suất không thường làm cho những người bảo trì hạnh phúc sau này. Tôi không chắc chắn mức độ dễ đọc sẽ được cải thiện trong trường hợp này với một mô-đun lớn như vậy.

Một điều khác tôi nhận thấy là một phần của mã được nêu là chung chung và phần còn lại của các dbs được mở rộng từ nó. Tôi không phải là một lập trình viên trăn, nhưng có lẽ điều này có thể biện minh cho điều gì đó?

Vì vậy, tôi không có câu trả lời cuối cùng, nhưng tôi hy vọng ai đó cũng nhấn mạnh những điểm này!

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.