Я работаю над форком библиотеки Divan CouchDB и столкнулся с необходимостью установить некоторые параметры конфигурации в httpwebrequest, который используется за кулисами. Сначала я начал передавать параметры через все уровни конструкторов и вызовов методов, но затем решил - почему бы не передать делегат конфигурации?
так в более общем сценарии,
дано:
class Foo {
private parm1, parm2, ... , parmN
public Foo(parm1, parm2, ... , parmN) {
this.parm1 = parm1;
this.parm2 = parm2;
...
this.parmN = parmN;
}
public Bar DoWork() {
var r = new externallyKnownResource();
r.parm1 = parm1;
r.parm2 = parm2;
...
r.parmN = parmN;
r.doStuff();
}
}
сделать:
class Foo {
private Action<externallyKnownResource> configurator;
public Foo(Action<externallyKnownResource> configurator) {
this.configurator = configurator;
}
public Bar DoWork() {
var r = new externallyKnownResource();
configurator(r);
r.doStuff();
}
}
последний кажется мне намного чище, но он подвергает воздействию внешнего мира, который class Foo
использует externallyKnownResource
мысли