Контекст: .NET, C #, но вопрос о ООП в целом.
Когда я пишу класс, который должен действовать как «служба», например, слушатель сокета или таймер, я вижу два подхода к его кодированию:
Создайте конструктор, и внутри конструктора немедленно запустите фоновую задачу. Например:
public class MyTimer
{
private readonly TimeSpan interval;
public MyTimer(TimeSpan interval)
{
this.interval = interval;
StartTicking();
}
private void StartTicking()
{
// do the ticking logic
}
}
Создайте конструктор, который принимает настройки класса, и добавьте явный метод для запуска:
public class MyTimer
{
private readonly TimeSpan interval;
public MyTimer(TimeSpan interval)
{
this.interval = interval;
}
public void StartTicking()
{
// do the ticking logic
}
}
Я склонен думать, что второй подход лучше:
A. Конструктор используется только для создания действительного экземпляра, сохраняя его минимальным и чистым.
B. Разработчик, который фактически использует мой класс, менее удивлен.
C. Аппаратные ресурсы не используются чрезмерно, поскольку класс «service» не использует их сразу.
Что ты думаешь? Это только вопрос стиля кодирования или больше?