Primary objectives

Rendering engine

  • XML/HTML driven rendering engine similar to that of Tapesty and Wicket. This would allow HTML developers to be a part of the iterative development process as they do not have to learn Java or special tag libraries. Their existing tools as long as they render XML compliant sources and can handle extra attributes would work.
  • Support directory structures. Unlike Tapestry or Wicket, Twiff will retains the directory structure of the HTML resources so there is no need to put everything into one directory.
  • The decorator pattern will be used on XML subtrees if a twiff call is required.

Development goals

  • Use Java 5.0 constructs where possible.
  • Use Maven to build the project.
  • Avoid singletons whenever possible.
  • Avoid framework level configuration files. To lower the barrier of entry to this framework, we avoid configuration files whenever possible. This is the approach that Wicket and Nanocontainer are taking, but not Tapestry or Struts.
  • Use PicoContainer as the IoC container. PicoContainer is the most "lightweight" container out there, it only does one thing, which is to provide an IoC framework and nothing else, unlike Spring. Also it is predominantly using Constructor Injected Dependencies which makes it easier to create immutable objects.
  • final everything that does not need to be extended. Its not for efficiency, its just to prevent unplanned behavior.

Non-functional requirements

  • Clusterability for horizontal scalability.

Low Priority Objectives

These objectives are not as high priority as the ones listed above.

Rendering engine

  • Allow XML renderer to work with Struts or any other places where JSP can be used.
  • Provide a JSP renderer through tag libraries.

Out of scope

  • Templating and include file support.
  • Authentication/Authorization. Container managed authenticaiton/authorization is used.