Qua nhiều năm sử dụng C # /. NET cho một loạt các dự án nội bộ, chúng tôi đã có một thư viện phát triển hữu cơ thành một thứ khổng lồ. Nó được gọi là "Util", và tôi chắc rằng nhiều bạn đã nhìn thấy một trong những con thú này trong sự nghiệp của bạn.
Nhiều phần của thư viện này rất độc lập và có thể được chia thành các dự án riêng biệt (mà chúng tôi muốn nguồn mở). Nhưng có một vấn đề lớn cần được giải quyết trước khi chúng có thể được phát hành dưới dạng các thư viện riêng biệt. Về cơ bản, có rất nhiều trường hợp về cái mà tôi có thể gọi là "phụ thuộc tùy chọn" giữa các thư viện này.
Để giải thích điều này tốt hơn, hãy xem xét một số mô-đun là ứng cử viên tốt để trở thành thư viện độc lập. CommandLineParser
là để phân tích dòng lệnh. XmlClassify
là để tuần tự hóa các lớp thành XML. PostBuildCheck
thực hiện kiểm tra trên tổ hợp đã biên dịch và báo cáo lỗi biên dịch nếu chúng không thành công. ConsoleColoredString
là một thư viện cho các chuỗi ký tự màu. Lingo
là để dịch giao diện người dùng.
Mỗi thư viện đó có thể được sử dụng hoàn toàn độc lập, nhưng nếu chúng được sử dụng cùng nhau thì sẽ có những tính năng bổ sung hữu ích. Ví dụ, cả hai CommandLineParser
và XmlClassify
phơi bày chức năng kiểm tra sau xây dựng, đòi hỏi PostBuildCheck
. Tương tự, CommandLineParser
tài liệu tùy chọn cho phép được cung cấp bằng cách sử dụng chuỗi ký tự màu, yêu cầu ConsoleColoredString
và nó hỗ trợ tài liệu có thể dịch qua Lingo
.
Vì vậy, điểm khác biệt chính là đây là những tính năng tùy chọn . Người ta có thể sử dụng một trình phân tích cú pháp dòng lệnh với các chuỗi đơn giản, không màu, mà không cần dịch tài liệu hoặc thực hiện bất kỳ kiểm tra sau khi xây dựng. Hoặc người ta có thể làm cho tài liệu có thể dịch nhưng vẫn không bị đổi màu. Hoặc cả màu và dịch. V.v.
Nhìn qua thư viện "Util" này, tôi thấy rằng hầu như tất cả các thư viện có khả năng phân tách đều có các tính năng tùy chọn như vậy buộc chúng vào các thư viện khác. Nếu tôi thực sự yêu cầu các thư viện đó làm phụ thuộc thì công cụ này hoàn toàn không được gỡ rối: về cơ bản bạn vẫn yêu cầu tất cả các thư viện nếu bạn chỉ muốn sử dụng một thư viện.
Có bất kỳ cách tiếp cận được thiết lập để quản lý các phụ thuộc tùy chọn như vậy trong .NET không?