Article 1Q5FW CodeSOD: Constantly Extended

CodeSOD: Constantly Extended

by
Remy Porter
from The Daily WTF on (#1Q5FW)

Imagine you're a financial institution. You've built an application that processes financial transactions, and there are a number of flags that need to be set as constants to determine application behavior.

You might choose to write code like this:

 public static final boolean CreateNewReferenceFolderAndFiles = true;

But then your boss would say, "Bro, do you even object-orient?" before firing you, because that isn't enterprise-y.

"Skyfyre" sent us this excerpt, from a four-million line application, which is definitely very enterprise-y.

First, you need to define several classes, and since this is Java, each of them must be in its own file:

 public abstract class ArchiveCreateNewReferenceFolderAndFiles { } public class ArchiveCreateNewReferenceFolderAndFilesTrue extends ArchiveCreateNewReferenceFolderAndFilesAbstract { } public class ArchiveCreateNewReferenceFolderAndFilesFalse extends ArchiveCreateNewReferenceFolderAndFilesAbstract { }

Then, you've got to create your actual constants:

public static final ArchiveCreateNewReferenceFolderAndFilesAbstract ARCHIVE_CreateNewReferenceFolderAndFiles_TRUE = new ArchiveCreateNewReferenceFolderAndFilesTrue();public static final ArchiveCreateNewReferenceFolderAndFilesAbstract ARCHIVE_CreateNewReferenceFolderAndFiles_FALSE = new ArchiveCreateNewReferenceFolderAndFilesFalse();/// later"public static final ArchiveCreateNewReferenceFolderAndFilesAbstract archiveCreateNewReferenceFile = ARCHIVE_CreateNewReferenceFolderAndFiles_TRUE;

Now, you're ready to write some real conditionals based on flags:

 if(archiveCreateNewReferenceFile instanceof ArchiveCreateNewReferenceFolderAndFilesTrue) { //do stuff" }

It's simplicity itself, and just think about how maintainable it is. When you finally need to support FileNotFound, you simply need to inherit from the ArchiveCreateNewReferenceFolderAndFiles class to produce ArchiveCreateNewReferenceFolderAndFilesFileNotFound. Think of the extensibility! Think of the readability!

inedo50.png [Advertisement] Otter, ProGet, BuildMaster - robust, powerful, scalable, and reliable additions to your existing DevOps toolchain. TheDailyWtf?d=yIl2AUoC8zA8DGxMc5XCT0
External Content
Source RSS or Atom Feed
Feed Location http://syndication.thedailywtf.com/TheDailyWtf
Feed Title The Daily WTF
Feed Link http://thedailywtf.com/
Reply 0 comments