Việc lựa chọn giữa một thư viện và một tệp thực thi là tương đối đơn giản: nó có hợp lý để thực thi mã bạn muốn đưa vào một tệp thực thi như một chương trình độc lập không? Nếu không, nó có lẽ nên là một thư viện. Nói chung, tôi sẽ ưu tiên một lớp thực thi mỏng hơn nhiều thư viện khi cần, vì điều đó giúp việc tái sử dụng các thư viện phụ trợ này sau này dễ dàng hơn và chúng không bị ràng buộc với một chương trình cụ thể.
Khi quyết định cách phân chia mã của bạn giữa các thư viện, bạn có thể thấy bài viết của chú Bob Martin về độ chi tiết hữu ích.
Trong đó, ông nói về cấu trúc OO và định nghĩa một số nguyên tắc có thể giúp bạn đóng gói mã của mình một cách thích hợp. Những điều này cũng được đề cập chi tiết hơn trong cuốn sách của ông, Nguyên tắc, mô hình và thực tiễn Agile trong C # .
Tôi sẽ tóm tắt các nguyên tắc dưới đây:
Nguyên tắc tương đương tái sử dụng / phát hành (REP)
Hạt tái sử dụng là hạt phát hành. Chỉ các thành phần được phát hành thông qua hệ thống theo dõi có thể được sử dụng lại một cách hiệu quả. Hạt này là gói.
Chú Bob định nghĩa việc tái sử dụng là có thể liên kết tĩnh hoặc động thư viện được sử dụng lại với chương trình của mình và không bao giờ phải xem mã nguồn của nó. Khi một phiên bản mới của thư viện được phát hành, anh ta có thể tích hợp nó vào hệ thống của mình.
Đối xử với các thư viện theo cách này chỉ khiến các thứ liên quan trong cùng một gói. Mặt khác, người tiêu dùng của thư viện có thể phải nâng cấp lên phiên bản mới mà không có lý do hoặc tụt lại một vài phiên bản phía sau.
Nguyên tắc tái sử dụng chung (CRP)
Các lớp trong một gói được sử dụng lại với nhau. Nếu bạn sử dụng lại một trong các lớp trong một gói, bạn sử dụng lại tất cả chúng.
Nguyên tắc này hỗ trợ một ở trên. Nếu bạn có các lớp trong cùng một gói không liên quan đến nhau, bạn có thể buộc người dùng thư viện của mình nâng cấp không cần thiết.
Nguyên tắc đóng cửa chung (ĐCSTQ)
Các lớp trong một gói nên được đóng lại với các loại thay đổi tương tự. Một thay đổi ảnh hưởng đến một gói ảnh hưởng đến tất cả các lớp trong gói đó.
Nguyên tắc này nói về khả năng bảo trì. Ý tưởng ở đây là nhóm các lớp dựa trên cách họ có thể cần thay đổi. Bằng cách đó, các thay đổi của bạn có thể được bản địa hóa thành một phần của ứng dụng và không lan truyền khắp nơi.
Nguyên tắc phụ thuộc theo chu kỳ (ACP)
Cấu trúc phụ thuộc giữa các gói phải là Đồ thị chu kỳ có hướng (DAG). Đó là, không có chu kỳ trong cấu trúc phụ thuộc.
Không cho phép các phụ thuộc theo chu kỳ cho phép mỗi gói được phát triển độc lập và "phát hành" cho phần còn lại của công ty khi các thay đổi mới đã sẵn sàng. Bằng cách này, bạn không kết thúc với hai đội bế tắc, chờ đợi nhau để hoàn thành một số công việc.