My *New* Favorite Anti-Pattern
September 30, 2009
Programming Pattern == A Template for a good way of doing things well.
Anti-Pattern == A Template for a good way of doing things poorly. :-)
This is closely related to the previous post.
As I was working on some code, I ran over this method (details changed
to protect the guilty):
public Object resolveSession(Object obj, String returnType) {
if (Obj instanceof String) {
if (returnType.equals("String"))
return obj;
if (returnType.equals("Session"))
return new DbSession((String) obj);
if (returnType.equals("Context"))
return new DbContext((String) obj);
}
if (Obj instanceof DbSession) {
if (returnType.equals("String"))
return ((DbSession) obj).getDbName();
if (returnType.equals("Session"))
return obj;
if (returnType.equals("Context"))
return new DbContext(((DbSession) obj).getDbName());
}
if (Obj instanceof DbContext) {
if (returnType.equals("String"))
return ((DbContext) obj).getDbSession().getDbName();
if (returnType.equals("Session"))
return ((DbContext) obj).getDbSession();
if (returnType.equals("Context"))
return new obj;
}
throw new RuntimeException("Bad input");
}
I suspect this was written with Python in mind, but it's not that
important. What's important is that it's useful and readable.
So... is it?
Is this:
Object dbAlias = "test";
DbSession session = (DbSession) resolveSession(dbAlias, "Session");
DbContext context = (DbContext) resolveSession(session, "Context");
better than this:
String dbAlias = "test";
DbSession session = new DbSession(dbAlias);
DbContext context = new DbContext(session.getDbName());
?
How much difference would it make if this were in Python?
How do you write your code?
-Bil