Is “Inversion of Control” a Bad Smell?
April 28th, 2009 — alexIs the request for an “Inversion of Control” a sign that the requester knows nothing about software design?
Is the request for an “Inversion of Control” a sign that the requester knows nothing about software design?
I get minor allergy reactions every spring, but I think this year I’ll just try to convince everyone it’s swine flu so I can be isolated and play with my computers without interruptions.
No, but it may appear to in some use cases. If you use redirect:write a lot for example:
<redirect:write file="{$outfile}">
...
</redirect:write>
The solution here is to bracket the write with open and close so that the engine does not have to implicitly track the open file stream:
<redirect:open file="{$outfile}"/>
<redirect:write file="{$outfile}">
...
</redirect:write>
<redirect:close file="{$outfile}"/>
This is a common question and the answers out there are pretty sketchy. So I’m going to provide my example code:
package demo;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
public class HTMLDemo {
public static void main(String[] args) {
FileOutputStream outputStream = null;
try {
Document newDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element html = newDocument.createElement("html");
Element head = newDocument.createElement("head");
Element body = newDocument.createElement("body");
Element p = newDocument.createElement("p");
Text textNode = newDocument.createTextNode("Hello World");
p.appendChild(textNode);
body.appendChild(p);
html.appendChild(head);
html.appendChild(body);
newDocument.appendChild(html);
outputStream = new FileOutputStream("/demo.html");
TransformerFactory.newInstance().newTransformer().transform(
new DOMSource(newDocument), new StreamResult(outputStream));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
I leave things like doctype as an exercise to the reader.