Здравствуйте, another_coder, Вы писали:
_>Код показывает только саму суть: возможность подменить логику без изменения основного функционала. Дилемма состоит в том, чтобы подобрать наиболее адекватное описание данного решения, чтобы не пускаться в описание деталей типа: "надо сделать статик, там сделать функтор, чтобы вытащить метод и бла-бла-бла".
_>Что это Strategy или Servant? Или другой какой-то? Поделитесь мыслями, плиз?
Это тупо глобальная статическая переменная.
Почему бы не сделать явную передачу зависимости?
Насчёт синтаксиса не уверен, т.к. плохо знаю c#
class SomeObject
{
private const Func<int, int, int> Sum;
public SomeObject(Func<int, int, int> f) {this.Sum=f;}
}
// standard code
var obj = new SomeObject(FuncProvider.Sum);
obj.Method(1,2);
// или так, если SomeObject иммутабелен
static class SomeObjectDefaults
{
public const SomeObject DEFAULT = new SomeObject((a, b) => a+b);
}
...
var obj = SomeObjectDefaults.DEFAULT;
obj.Method(1,2);
// code with overriden Sum function
var obj = new SomeObject((a,b) => {
if (/*some condition*/) return a+b;
return 0;
});
obj.Method(1,2);