Proposal by Den Bardadym for Add functionality to Suixo

Proposed by Den Bardadym (profile, biography) Don't forget to submit this proposal to official Google Melange site too!

Improving the Suixo Application Framework

Developing a Naked Objects style UI.

All enterprise applications contain common parts such as: Domain model, GUI, Validation, Logging, Authentication, Reporting, Search, Persistence. The Naked Objects (NO) design pattern gives us the opportunity to implement only a domain model and derive other parts automatically. This allows development to focus on the domain functionality and to achieve a consistent user interface.

There are existing realizations of such patterns in Java and .NET: JMatter Framework, NakedObjects and Spring Roo framework. Suixo is a framework for creating vertical market solutions, designed
to empower the developer. Adding NO to Suixo allows us to achieve:
  • A faster development cycle;
  • Greater agility;
  • A more empowering style of user interface;
  • Easier requirements analysis.

Suixo currently uses Suixo Model classes derived from SXPersistent as its domain model classes. They already use a declarative description to define a number of key aspects needed for a NO interface:
  • Field definitions are declared using Pragmas, and they can be used to build an automatic edit form.
  • Column definitions can be used to build a table view.
  • Navigation definitions can be used to create links to other domain objects.
  • Selection definitions can be used for list filters.
  • Workflow definitions can be used to manage object state.
The model classes use default builders to create edit forms and filtered lists and can override those defaults to create specialized views.

How will I do that project

Start with a simple and small domain model, suitable for a Naked Objects approach. Create it as Suixo Model classes. Create a simple mapping to the (existing) default user interface and
persistence layers.

An issue tracker could be a good application to start with. In the JMatter documentation an issue tracker is used as an example, and the current Seaside and Pharo issue trackers could be used as
sources of sample data. They already provide an RSS-feed.

Make sure the application can be used as a tutorial, and is documented as such.

Focus the project on the UI aspects of NO. Suixo is web-based, and a combination of html, css and javascript will be used. 
The following steps can be identified already:
  • Create a containing view where multiple objects can be shown simultanously.
  • Create a list view for that view.
  • Create a unmodifiable single object view.
  • Make that view switchable between icon+title and full view
  • Make that view editable.
  • Make that view handle object actions
  • Make that view show navigation links
  • Make that view contain tabs for grouping
  • Make drag-and-drop for relations work (first 1-1)
  • Expand the list view to multiple object views:
    •  map
    •  card view
    •  calendar view
Parallel to those steps:
  • Create widgets for use in the NO UI for all relevant domain types.

What methodologies will I use

An agile process where every week is started with a retrospective on the week before, and a planning for the next week, taking a look at the current priorities, describing work to-do at a level of two hours to a day of work. We do a daily virtual stand-up meeting where I describe what I did yesterday, plan to do today, and where I need help.

Suggested timeline and milestones

This preliminary planning will be adapted based on the results of the retrospectives.

26/4/2010 - 24/5/2010
Introduction and study the current architecture Suixo

25/5/2010 - 1/6/2010
Unification and the choice of architecture persistence objects

2/6/2010 - 8/6/2010
Preparation of the implementation of stored objects

9/6/2010 - 20/6/2010
Creating a UI for domain objects with the integration of meta data

21/6/2010 - 27/6/2010
UI for actions with objects

28/6/2010 - 11/7/2010
Integration of the system of authorization and authentication

12/7/2010 - 15/7/2010
Preparation of preliminary results

17/7/2010 - 26/7/2010
UI for the relationship between objects

27/7/2010 - 3/8/2010
Querying and searching

4/8/2010 - 9/8/2010
Training results

Where I see the risks

  • The timeline is ambitious. Early succeses should be defined to keep motivation high.
  • Browser compatibility issues. The UI will use advanced javascript functionality.
  • Creating a compact but usable object view. JMatter and NakedObjects use a lot of screen real estate for a single object. A more compact view would allow interaction in a more complex domain model.
  • Making NO work with complex domain models where type object is used to handle constraints. NO works well with a flat, explicit domain model. When aspects of properties depend on type objects, it gets difficult to make the UI reflect the current constraints.
  • Creating a usable interaction model for workflows and complex transactions.
  • Keeping the code always running. Suixo is used in a production environment, and the NO interface has to be integrated without forking the code base.

How the results will look like

The results will consist of
  • a working demo application, showing a NO interface
  • documentation on how to construct NO applications with Suixo
  • an NO framework in Suixo.

Updated: 8.4.2010