Channels ▼

Bil Lewis

Dr. Dobb's Bloggers

When is it Reasonable to Reuse a Name?

November 03, 2009

tool.Blast != pipeline.tool.Blast

In our bio-informatics pipeline, we have a lot of pipeline steps that
run external tools, such as Blast (Basic Local Alignment Search
Tool). We have a very nice template for doing this. 

We have a Runner step that writes out the files for the tool and then
constructs a command string which is run in a shell. It is followed by
a Parser step that reads in the tool's output file and creates
alignment objects, which are passed down to the Featurizer step, which
turns them into Hibernate objects for persistance in the database.

We generally encapsulate these three steps in a sub-pipeline, kinda
like this:

package pipeline.tool;

class Blast extends Pipeline {

  public void start() {
    subpipeline.add(new Runner());
    subpipeline.add(new Parser());
    subpipeline.add(new Featurizer());
  }

Something that a lot of my peers do is to use the same name for the
tool as they do for the pipeline step.

class Runner extends PipelineStep {
  tool.Blast tool;

  public void process(Input input) {
    File p = FastaWriter.writeSequences(input.getProteinSequences());
    File g = FastaWriter.writeSequences(input.getGenomeSequences());
    tool = new tool.Blast(p, g);
    File output = tool.run();
    callback.call(output);
  }
}

and the tool looks something like this:

package tool;

class Blast extends Tool {
  ...

  public File run() {
    File output = File.createTempFile();
    String command = "/home/tools/blast -i " + p + " -d " + g + " o "+ output;
    runCommand(command);
    return output;
  }
}

The upshot of this is that we have two classes, both named Blast, a
tool, tool.Blast and a pipeline step, pipeline.tool.Blast.

The good thing about this is that we always get a short, succicent,
and meaningful name. The bad part is that when the classes are large,
it is easy to get lost in the middle and you're not entirely certain
which class you're looking at.

Now I, as you can probably guess, eschew such abbreviations and use
more expressive (and longer) names. I'd name these BlastTool and
BlastStep.

How do you view this? 

Has this ever been a problem for you? Or has it made programming
easier?

-Bil

Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 


Video