Насколько я понимаю, здесь есть много ТВЕРДЫХ нарушений!
- Нарушения принципа единой ответственности - во-первых, у вас есть методы доступа к данным для нескольких классов, во-вторых, у вас есть вспомогательные методы (IsStringNull, IsNull и т. Д.), Сплетенные с ними.
- Нарушения принципа сегрегации интерфейса (как упомянуто Рубеном). Если меня интересуют только продукты, зачем мне использовать методы, которые привлекают пользователей?
Я уверен, что есть и другие, но это явные.
ОБНОВЛЕНИЕ Теперь, когда кто-то прокомментировал это, я думаю, что они правы; приведенный выше код выглядит как некая форма злоупотребления методом расширения .
Например, я не верю, что доступ к данным должен быть отнесен к методам расширения или, что еще хуже, к классу с именем «Инструменты».
Вероятно, было бы более разумно иметь базовый класс (в совершенно другом пространстве имен и / или сборке), который абстрагирует ваши общности доступа к данным, а затем наследовать один класс доступа к данным для каждого уникального объекта домена (например, UserDAO, ProductDAO , так далее). Поймите, что я предполагаю, что под GetProduct или GetUser вы на самом деле имеете в виду GetFromDatabase.
Остальные вспомогательные методы принадлежат расширениям, поэтому они в порядке.