Take Java syntax as an example, though the question itself is language independent. If the following snippet takes an object MyAbstractEmailTemplate
as input argument in the method setTemplate
, the class MyGateway
will then become tightly-coupled with the object MyAbstractEmailTemplate
, which lessens the re-usability of the class MyGateway
.
A compromise is to use dependency-injection to ease the instantiation of MyAbstractEmailTemplate
. This might solve the coupling problem
to some extent, but the interface is still rigid, hardly providing enough flexibility to
other developers/ applications.
So if we only use primitive data type (or even plain XML in web service) as the input/ output of a method, it seems the coupling problem no longer exists. So what do you think?
public class MyGateway {
protected MyAbstractEmailTemplate template;
public void setTemplate(MyAbstractEmailTemplate template) {
this.template = template;
}
}