За роки використання C # /. NET для ряду внутрішніх проектів у нас була одна бібліотека, яка органічно зростала в один величезний пакет матеріалів. Це називається "Util", і я впевнений, що багато хто з вас бачили одного з цих звірів у своїй кар'єрі.
Багато частин цієї бібліотеки дуже автономні, і їх можна розділити на окремі проекти (які ми хотіли б відкрити). Але є одна основна проблема, яку потрібно вирішити, перш ніж їх можна випустити як окремі бібліотеки. В основному, між цими бібліотеками є багато і багато випадків того, що я можу назвати "необов'язковими залежностями" .
Щоб пояснити це краще, розглянемо деякі модулі, які є хорошими кандидатами, щоб стати самостійними бібліотеками. CommandLineParser
призначений для розбору командних рядків. XmlClassify
призначений для серіалізації класів у XML. PostBuildCheck
здійснює перевірку складеної збірки та повідомляє про помилку компіляції, якщо вони не вдається. ConsoleColoredString
це бібліотека кольорових літеральних рядків. Lingo
призначений для перекладу користувальницьких інтерфейсів.
Кожну з цих бібліотек можна використовувати повністю окремо, але якщо вони використовуються разом, то є корисні додаткові функції. Наприклад, CommandLineParser
і XmlClassify
викрийте функцію перевірки після збирання, яка вимагає PostBuildCheck
. Аналогічно, CommandLineParser
документація щодо опцій дозволяє надавати кольорові літеральні рядки, що вимагають ConsoleColoredString
, і вона підтримує документацію, що перекладається через Lingo
.
Тож ключовою відмінністю є те, що це додаткові функції . Можна використовувати аналізатор командного рядка з простими, безбарвними рядками, не перекладаючи документацію або виконуючи перевірки після збирання. Або можна зробити документацію перекладною, але все ще незабарвленою. Або кольоровими, і перекладаються. І т.д.
Переглядаючи цю бібліотеку "Util", я бачу, що майже всі потенційно відокремлювані бібліотеки мають такі додаткові функції, які прив'язують їх до інших бібліотек. Якби я справді потребував цих бібліотек як залежних, то ця пачка речей взагалі насправді не розплутується: ви все-таки потребуєте всіх бібліотек, якщо хочете використовувати лише одну.
Чи існують усталені підходи до управління такими необов'язковими залежностями в .NET?