Что включить в библиотеку утилит
-
03-07-2019 - |
Вопрос
Имея за плечами все больше и больше проектов, я обнаружил, что часто повторяю многие общие задачи от проекта к проекту, от клиента к клиенту.Итак, я начал собирать «служебную» библиотеку, набор общих элементов, которые часто повторяются от проекта к проекту.
На данный момент у меня есть утилиты для изменения размера изображений, экспорта сеток данных в Excel, отправки электронных писем и замены токенизированных сообщений.
Если бы вы создавали/использовали библиотеку служебных классов .NET, какие типы процессов вы бы посчитали полезными?Какие пространства имен/группы вы бы себе представили?
Обновлять
Я говорю о реальной библиотеке классов, разделенной на пространства имен для группировки общих элементов.
Решение
- Я бы не стал писать библиотеку под названием «Общие», «Утилиты», «Разное» или…Вы поняли идею.Вместо этого у меня был бы каталог под названием «Lib», и каждая область функциональности находилась бы в отдельной библиотеке.Например, у меня могут быть Lib/Trace, Lib/UI, Lib/Net, Lib/Web для проекта C++.Для C# у меня были бы Lib/Acme.Trace, Lib/Acme.Windows.Forms, Lib/Acme.Net и т. д.(при условии, что ваше пространство имен/компания верхнего уровня называется «Acme»).
- ЯГНИ.Не начинайте писать код, который вы мощь нуждаться.
- Не добавляйте вещи в общую библиотеку, пока не используете их в двух или более проектах.
Другие советы
Лично я бы часть этого функционала вынес в отдельные библиотеки, так как «полезность» — довольно субъективный термин, то, что одному человеку кажется полезным, не очень полезно другому.
Если бы внутри библиотеки она была разбита на описательные пространства имен, то я бы сказал, что это лучше (например.изображения изменения размера будут находиться в каком-то пространстве имен .Drawing или в .Drawing.dll).
В моей библиотеке классов есть множество вещей, которые я делю между проектами:
- IoC-контейнер и платформа внедрения зависимостей
- Полная структура контроллера/наблюдателя позволяет мне отделить код пользовательского интерфейса от кода обратной логики.
- Разумный, независимый от базы данных набор классов для выполнения SQL устраняет некоторые синтаксические различия, в основном имена функций.
- Множество других вспомогательных классов и служебных методов для работы с данными.
- Некоторые стандартизированные классы внутренней памяти, например
Tuple<..>
и т. д. - Некоторые пользовательские коллекции, например
Set<T>
,Heap<T>
, а также множество служебных методов для работы с различными типами коллекций.
Библиотека классов добавляется, когда мне нужно больше вещей.
Я бы предложил вместо «служебной» библиотеки просто создавать библиотеки, специфичные для предметной области (графика, аутентификация, проверка и т. д.), и включать их только там, где они необходимы.Ключевым моментом, конечно же, является решение о том, насколько конкретным быть.Чем больше конкретики, тем лучше.
Даже если у него нет предметной области, вы, вероятно, не до конца его понимаете, а это означает, что вам следует в первую очередь переоценить то, что вы делаете и пытаетесь достичь.
Кроме того, помните, что то, что полезно в одном или двух проектах, может оказаться полезным только в одном или двух проектах.Добавление большего количества классов, чем необходимо, только вызовет проблемы с обслуживанием в будущем.
Хотя я сам только начинающий разработчик, я считаю, что функции RegEx и фильтры SQL весьма полезны.У меня также есть функция репликации слиянием для MSSQL, которая до сих пор мне очень пригодилась.