Представьте себе набор библиотек, представляющих некоторые API.Используя инверсию механизмов управления, конкретные реализации будут внедрены в потребляющий проект.
Вот ситуация.У меня есть некоторые библиотеки API, зависящие от других библиотек API для определенных функций - поэтому сами библиотеки API в какой-то момент связаны.Эта связь может стать проблемой позже, потому что изменение одного API приведет к изменениям зависимых API, и соответствующие реализации также необходимо будет изменить, поэтому в худшем случае мы получим целый ряд проектов, которые необходимоизменено, чтобы отразить форму изменения только одного из них.
Теперь я имею в виду два возможных решения для этого:
Создание проекта монолитного API, который объединяет связанный APIбиблиотеки.
Дальнейшее разделение API-интерфейсов путем предоставления каждой библиотеке обеспечения интерфейсов для всех функциональных возможностей , которые зависят от другого API, поэтому прямая зависимость удаляется.Это может привести к схожему коду в обеих библиотеках, но дает свободу реализации, выбранной с помощью механизмов IoC, а также позволяет API улучшаться независимо друг от друга (при изменении API изменения будут влиять только на библиотеки его реализации, а недругие API или их реализации).
Проблема второго подхода заключается в дублировании кода, и в результате может возникнуть слишком много библиотек API, на которые необходимо ссылаться (например,в приложении .NET каждый API будет отдельной библиотекой DLL. В некоторых сценариях, например в приложениях Silverlight, это может быть связано с размером приложения - временем загрузки и производительностью клиента в целом).
Есть ли лучшее решение дляситуация.Когда лучше объединить несколько API-библиотек в одну большую, а когда нет?Я знаю, что это очень общий вопрос, который я задаю, но давайте на мгновение проигнорируем сроки выполнения, оценки, требования клиентов и технологии, я хочу иметь возможность определить правильный подход, основанный как на достижении максимальной масштабируемости, так и минимального времени обслуживания.Итак, что может быть хорошей причиной для выбора того или иного подхода, или другого, который вы мне могли бы предложить?
Редактировать:
Я чувствую, что должен кое-что прояснить относительновопрос.Я имею в виду отделение API друг от друга, а не API от его реализации.Так, например, если у меня есть API безопасности для проверки разрешений доступа и API учетных записей пользователей, который использует (ссылается) API безопасности, изменение API безопасности приведет к необходимости изменения API учетных записей пользователей и реализации их обоих.Чем больше API-интерфейсов будут связаны таким образом, тем больше изменений придется применить.Это то, чего я хочу избежать.