Этот на самом деле очень простой. Может быть, кто-то приходит с хорошим :) решением.OO-шаблон для инъекции небольшого состояния
Имейте интерфейс, скажем, IComponent.
public interface IComponent {
string GetStatus();
}
несколько реализаций IComponent
нужно пропустить одну часть логики в GetStatus()
, если текущее время между 12:00 утра и 12:10 утра. Но есть и другие реализации IComponent
, которые не заботятся ни о каком временном интервале.
Так сказать:
public interface MyComponent : IComponent {
public string GetStatus() {
StringBuilder result = ...;
....
if (/*current time between 12:00AM and 12:10AM */)
result.Append("good enough");
else {
//calculate result
result.Append(/*calculated result*/);
}
...
return result.ToString();
}
}
Так что я в основном нужно это incapsulating
if (/*current time between 12:00AM and 12:10AM */)
return "good enough";
в некоторый класс, давайте назовем его 'SomeBehavior'
или чего-л, и он может быть повторно использован в течение требуетсяIComponent
-объекты.
Если это помогает, значение этого if
- условие - «пропустить проверку файлов статистики», поэтому его можно назвать, например. SkipStatFilesCheckBehavior.
Хотя я не уверен в именовании, вот почему я здесь (вы можете назвать их как-то более подходящими, чем «поведение»). Каков наилучший способ его реализации? Как «поведение» может быть лучше введено в IComponent
- реализации (например, через конструктор или что-то еще)? Будет ли решение расширяемым, если мне понадобится какое-то другое «поведение» в будущем? Возможно, в будущем некоторые виды «поведения» потребуют ссылки на IComponent
-реализации.
Вы можете переадресовать вызов GetStatus в какой-то делегат, который вы передаете в метод, который будет выполняться во время создания экземпляра в конструкторе. – Thomas