Рекомендации по созданию библиотек, использующих пространства имен .NET

StackOverflow https://stackoverflow.com/questions/1908739

Вопрос

Является ли плохой практикой писать библиотеку, которая определяет интерфейс, зависящий от другой библиотеки?

Я знаю, что тесная связь - это плохо, но применяется ли это по-прежнему при использовании .СЕТЕВЫЕ классы?

Например, в .NET, если у меня есть библиотека, которая возвращает объект Color, это приведет к зависимости от System.Рисование на всем, что использует мою библиотеку.Было бы мне лучше создать свой собственный класс цветовых типов внутри моей библиотеки?

Это было полезно?

Решение

Я различаю Изменчивый и Стабильные зависимости.

В общем, Color выглядит как стабильная зависимость, потому что она уже есть в BCL, она детерминирована по своей природе и не требует какого-либо ресурсоемкого взаимодействия вне процесса, а также не зависит от конкретной настройки среды выполнения.

Единственное соображение здесь заключается в том, что когда дело доходит до цвета, в BCL существует более одного такого класса, поэтому убедитесь, что вы действительно хотите настроить таргетинг только на приложения Windows Forms с помощью вашего API, потому что WPF имеет свое собственное определение цвета.

Если вам просто нужен цвет для окрашивания частей пользовательского интерфейса в определенный цвет, то встроенный класс Color, вероятно, подойдет, но если Color является основной концепцией в вашей модели предметной области, и вам нужно настроить таргетинг на разные пользовательские интерфейсы (WPF, Windows Forms, Web), вам, вероятно, было бы лучше определить свою собственную абстракцию.

В таком более продвинутом случае вы могли бы впоследствии создать адаптеры и картографы вокруг вашей абстракции, чтобы преодолеть разрыв между абстракцией и конкретными цветовыми классами.

Другие советы

Если бы это была стандартная библиотека .NET, я бы не стал беспокоиться об этом.Нет причин переходить из одного класса в другой ...что, если Система.Цвет изменился в следующем выпуске .NET?Вам также придется изменить свой код сопоставления и, возможно, определить версию и сопоставить соответствующим образом.Это настоящая боль.

Со всеми моими библиотеками я возвращаю объекты, которые зависят только от объектов в библиотеке.

Я бы спросил себя, зачем я писал библиотеку, которая зависела бы от другого пространства имен, которое не было неявным.Кажется, это противоречит всей концепции "Инкапсуляции".

Итак, просто исходя из моих собственных рассуждений и знаний ООП, я бы сказал, что вы на правильном пути с возвращением вашего собственного независимого объекта.

Вы задаете отличный вопрос.Ответ таков:это зависит от обстоятельств.В случае стандартных библиотек, которые всегда будут доступны, тогда все в порядке;основная библиотека постоянно ссылается на разные .Библиотеки DLL.

В случае со сторонней библиотекой вы сталкиваетесь с проблемами.Не всегда хорошая идея создавать свой собственный, если что-то другое делает то, что вы хотите, но тогда у вас возникает зависимость от другой библиотеки, что является логистической проблемой для пользователей.

Здесь нет правильного ответа, вам просто нужно выбрать то, что имеет наибольший смысл для вашего проекта.Да, старайся отделиться как можно больше, но иногда тебе просто нужно прижаться друг к другу и выполнить свою работу.

Это зависит от того, как вы используете класс.

Если вам когда-нибудь понадобится получить экземпляр класса system Color из экземпляра вашего класса Color (например, если вы рисуете в форме Windows), то было бы лучше использовать класс System - это избавит вас от необходимости конвертировать между двумя типами и даст вам преимущество в том, что вы сможете бесплатно использовать все "Функции" класса Color (например, встроенные константы для "Красного", "Черного", "Зеленого" и т.д...

Если, с другой стороны, вы просто работаете с произвольными значениями RGB (возможно, для научных расчетов) и никогда необходимо преобразовать в экземпляр System.Color, тогда, возможно, имеет смысл создать свой собственный класс.

По всей вероятности, вам лучше использовать систему.Класс цвета - да, инкапсуляция и все такое - хорошая идея, однако не за счет экономии вашего огромного количества времени!

Вам не стоит беспокоиться об использовании чего-либо из библиотеки .NET core.Без этого вы бы не продвинулись далеко в написании библиотеки DLL.Единственное место, где, возможно, следует быть осторожным с этим, - это система.Веб-пространство имен, поскольку я полагаю, что в .NET 4 есть установщик профиля клиента, что в основном означает, что если вы используете этот установщик, он установит только то, что, как ожидается, будет использоваться на клиенте.Лично я считаю, что это плохая идея со стороны Microsoft, поскольку она просто добавляет ненужные сложности для экономии небольшого количества времени загрузки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top