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.