NOTICE! This is a static HTML version of a legacy ImageJ Trac ticket.

The ImageJ project now uses GitHub Issues for issue tracking.

Please file all new issues there.

Ticket #10 (assigned feature)

Opened 2010-02-15T14:14:10-06:00

Last modified 2012-02-26T21:43:33-06:00

Maintain strict separation of concerns (i.e., UI independence)

Reported by: curtis Owned by: curtis
Priority: blocker Milestone: imagej-2.0.0
Component: Core Version:
Severity: serious Keywords:
Cc: Blocked By: #138, #190, #214, #579, #860, #884, #911, #995
Blocking:

Description (last modified by curtis)

Currently, ImageJ has several design issues that impact any possibility of running it without a GUI in a headless environment:

  • Commands are tied to specific AWT menu items
  • The macro system is tied to the AWT-driven GenericDialog
  • The code was generally designed assuming AWT GUI elements are available

We want to separate ImageJ into a (headless) library layer that performs image processing without a GUI, and one or more graphical layers that provide user interaction and call into the library to perform tasks.

As part of this task, we are exploring strategies to organize this separation, such as a  Model-View-Controller (MVC) architecture. There are various MVC frameworks available such as  Struts and  Spring, though they are generally targeted toward web applications rather than desktop ones. We plan to examine these, though it is equally likely we will avoid dependencies on third-party libraries in favor of a simpler design.

For relevant discussion, see the " Separation of concerns (MVC, AWT/Swing/etc.)" thread on the ImageJX discussion group.

Change History

comment:1 Changed 2010-02-15T14:17:11-06:00 by curtis

According to its author,  Endrov has a strict separation of concerns. And  Bio7 is built using the  Eclipse Rich Client Platform.

comment:2 Changed 2010-02-15T18:14:50-06:00 by curtis

  • Description modified

comment:3 Changed 2010-03-01T17:04:54-06:00 by gharris

  • Status changed from new to accepted

comment:4 Changed 2011-02-16T13:34:55-06:00 by curtis

  • Status changed from accepted to closed
  • Resolution set to fixed

Our current approach is to use SezPoz for dependency injection, with a GUI-independent plugin/module/tool interface hierarchy. Depending on the execution context (in a GUI, headless from a console, etc.) the mechanism for plugin and module execution will change. It looks unlikely at this time that we will need to rely on any formal MVC framework.

comment:5 Changed 2012-02-23T11:16:44-06:00 by curtis

  • Type changed from task to story

comment:6 Changed 2012-02-23T11:18:53-06:00 by curtis

  • Blocking 6 added

comment:6 Changed 2012-02-24T13:43:29-06:00 by curtis

  • Summary changed from Explore MVC frameworks for separation of concerns to Maintain strict separation of concerns (i.e., UI independence)

comment:7 Changed 2012-02-24T13:44:45-06:00 by curtis

  • Blocked By 138 added

comment:8 Changed 2012-02-24T13:50:07-06:00 by curtis

  • Blocked By 190 added

comment:9 Changed 2012-02-24T13:59:02-06:00 by curtis

  • Blocked By 214 added

comment:10 Changed 2012-02-26T21:42:06-06:00 by curtis

  • Blocked By 995 added

comment:7 Changed 2012-02-26T21:43:22-06:00 by curtis

  • Status changed from closed to reopened
  • Resolution fixed deleted
  • Milestone changed from imagej-2.0-alpha1 to imagej-2.0-final

comment:8 Changed 2012-02-26T21:43:33-06:00 by curtis

  • Owner changed from gharris to curtis
  • Status changed from reopened to assigned

comment:9 Changed 2012-02-26T21:55:30-06:00 by curtis

  • Blocked By 860 added

comment:10 Changed 2012-02-26T22:51:40-06:00 by curtis

  • Blocked By 911 added

comment:11 Changed 2012-02-26T22:57:09-06:00 by curtis

  • Blocked By 660 added

comment:12 Changed 2012-02-26T22:58:06-06:00 by curtis

  • Blocked By 579 added

comment:13 Changed 2012-02-26T22:58:13-06:00 by curtis

  • Blocked By 660 removed

comment:14 Changed 2012-02-26T23:01:22-06:00 by curtis

  • Blocked By 884 added

comment:15 Changed 2012-03-05T14:33:36-06:00 by curtis

  • Blocking 6 removed