I'm re-evaluating my thoughts on constructor based dependencies vs setter dependencies in JavaScript. I'm trying to see if the same reasons we avoid setter injection in static language like C# and Java still apply in JavaScript.
In other words, why is this:
var a = new A();
var b = new B();
var c = new C(a, b);
better than this:
var a = new A();
var b = new B();
var c = new C();
c.a = a;
c.b = b;
What are the reasons that you would choose constructor parameters vs setters, and why?
What other options are there for runtime composition of the c
object, so that it can correctly make use of a
and b
? When would you choose those options?
I'm not sure I understand the context 100% here due to the abstract object names. The relation between A, B, and C might make a difference in how I viewed the situation (e.g. if A and B only existed to hang off of Cs, then my opinion might change, but I'm not sure).
That said, I would almost always prefer to see something like this in code that I need to work with, assuming A and B are available at the time that you construct C:
Or, just:
To me, it feels like a more idiomatic approach that matches what I'm accustomed to from working with client-side libraries. I know it's essentially the original first choice rehashed, but seeing it that way makes the decision more clear to me.