Вопрос

Имея за плечами все больше и больше проектов, я обнаружил, что часто повторяю многие общие задачи от проекта к проекту, от клиента к клиенту.Итак, я начал собирать «служебную» библиотеку, набор общих элементов, которые часто повторяются от проекта к проекту.

На данный момент у меня есть утилиты для изменения размера изображений, экспорта сеток данных в Excel, отправки электронных писем и замены токенизированных сообщений.

Если бы вы создавали/использовали библиотеку служебных классов .NET, какие типы процессов вы бы посчитали полезными?Какие пространства имен/группы вы бы себе представили?

Обновлять

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

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

Решение

  1. Я бы не стал писать библиотеку под названием «Общие», «Утилиты», «Разное» или…Вы поняли идею.Вместо этого у меня был бы каталог под названием «Lib», и каждая область функциональности находилась бы в отдельной библиотеке.Например, у меня могут быть Lib/Trace, Lib/UI, Lib/Net, Lib/Web для проекта C++.Для C# у меня были бы Lib/Acme.Trace, Lib/Acme.Windows.Forms, Lib/Acme.Net и т. д.(при условии, что ваше пространство имен/компания верхнего уровня называется «Acme»).
  2. ЯГНИ.Не начинайте писать код, который вы мощь нуждаться.
  3. Не добавляйте вещи в общую библиотеку, пока не используете их в двух или более проектах.

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

Лично я бы часть этого функционала вынес в отдельные библиотеки, так как «полезность» — довольно субъективный термин, то, что одному человеку кажется полезным, не очень полезно другому.

Если бы внутри библиотеки она была разбита на описательные пространства имен, то я бы сказал, что это лучше (например.изображения изменения размера будут находиться в каком-то пространстве имен .Drawing или в .Drawing.dll).

В моей библиотеке классов есть множество вещей, которые я делю между проектами:

  • IoC-контейнер и платформа внедрения зависимостей
  • Полная структура контроллера/наблюдателя позволяет мне отделить код пользовательского интерфейса от кода обратной логики.
  • Разумный, независимый от базы данных набор классов для выполнения SQL устраняет некоторые синтаксические различия, в основном имена функций.
  • Множество других вспомогательных классов и служебных методов для работы с данными.
  • Некоторые стандартизированные классы внутренней памяти, например Tuple<..> и т. д.
  • Некоторые пользовательские коллекции, например Set<T>, Heap<T>, а также множество служебных методов для работы с различными типами коллекций.

Библиотека классов добавляется, когда мне нужно больше вещей.

Я бы предложил вместо «служебной» библиотеки просто создавать библиотеки, специфичные для предметной области (графика, аутентификация, проверка и т. д.), и включать их только там, где они необходимы.Ключевым моментом, конечно же, является решение о том, насколько конкретным быть.Чем больше конкретики, тем лучше.

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

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

Хотя я сам только начинающий разработчик, я считаю, что функции RegEx и фильтры SQL весьма полезны.У меня также есть функция репликации слиянием для MSSQL, которая до сих пор мне очень пригодилась.

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