Под хелпером понимается static класс с набором static методов, объединенных между собой какой-то некой тематикой. Непример хелпер по работе с файлами, хелпер по работе с базой и т.п.
У меня очень много подобных хелперов. Делая какую-либо задачу понимаешь, что часть методов повторно где-то еще будут использованы, поэтому они преобразуются в статические и выносятся в хелпер. В итоге получается ситуация, когда по всему солюшену (с множеством проектов внутри) разбросаны разного рода хелперы. Нормально ли такое положение с точки зрения чистоты кода или же так делать плохо? Если плохо, то как делать правильно?
Это не очень хорошо, и противоречит принципам SOLID которые в свою очередь помогают писать простой, слабосвязанный, легко-расширяемый код, на который можно легко писать юнит тесты.
Гораздо лучше вместо хелперов использовать "сервисы" которые могут быть синглтонами если нужно хранить глобальное состояние. И пробрасывать как зависимость через конструктор.
Выглядит это примерно так:
public interface IFileService //Сервис вместо хелпера
{
IEnumerable<string> ReadLines(string fileName);
}
public class FileService : IFileService //Реализация файлового сервиса
{
public IEnumerable<string> ReadLines(string fileName)
{
using (var reader = new StreamReader(fileName))
{
while (!reader.EndOfStream)
yield return reader.ReadLine();
}
}
}
public interface IFileParser
{
IEnumerable<decimal> Parse(string fileName);
}
public class FileParser : IFileParser//Класс в котором требуется работа с файлами
{
private readonly IFileService fileService;
public FileParser(IFileService fileService)
{
this.fileService = fileService;
}
public IEnumerable<decimal> Parse(string fileName)
{
foreach (var line in fileService.ReadLines(fileName))
if (decimal.TryParse(line, out var number))
yield return number;
}
}
Так как вы передаете в класс зависимость по интерфейсу, то в некоторых случаях вы можете передавать другую реализацию файлового сервиса, например XMLFileService
а при юнит тестировании FileParser
можете передавать сгенерированную заглушку IFileService
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не могу понять, как получать cookie от сервера через WebRequestПросто не устанавливает и не видит их
Есть winform приложение на C#, которое формирует html-файл (форма ввода сведений: 5 полей для ввода текста и кнопка submit)На форме расположен WebBrowser,...
Необходимо сделать такой элемент,при помощи каких средств это делается?