Last modified by Klaus Berkling on 2011/09/06 00:31

From version 48.1
edited by arroz
on 2007/12/16 21:51
Change comment: There is no comment for this version
To version 51.1
edited by arroz
on 2007/12/17 14:35
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -18,15 +18,16 @@
18 18  
19 19  * XHTML generation. Although WebObjects 5.4 finally provides XHTML compliant code generation, WONDER was the only way to achieve that in previous WebObjects versions. I mention this feature first because it actually was the feature that made my start using WONDER in first place.
20 20  * Automatic EOEditingContext locking. This feature is huge. We'll talk about locking a lot in later sections, but trust me, you'll want WONDER to handle the locking for you. No more unlocked contexts to be corrupted while you edit them, and no more deadlocks and locked contexts lying around.
21 -* Collections re-implementation supporting Java Generics. This means that you may create an NSArray, NSDictionary or any other "NS collection" typed to a class or interface. I don't actually like this feature, because I'm a LISP lover and I see this as unnecessary constraints. Anyway, I mention this because I admit it may improve the code quality in some ways, and because WONDER implementation is, in some ways, better than Apple's (Apple delivered generics support for collections in 5.4).
21 +* Collections re-implementation supporting Java Generics. This means that you may create an NSArray, NSDictionary or any other "NS collection" typed to a class or interface. I don't actually like this feature, because I'm a LISP lover and I see this as unnecessary constraints. Anyway, I mention this because I admit it may improve the code quality in some ways, and because WONDER implementation has the advantage that it can be used in pre-5.4 WO versions (Apple introduced generics support for collections in 5.4). The are also some common-used methods, like pageWithName(), that were implemented in WONDER using generics.
22 22  * COUNT SQL query generation. This is a very, very useful feature, at least for me. There are many times when you just want to know how many objects are selected by a query, but you don't want the objects themselves, specially because we may be talking about tens of thousands, or more. Think something like Amazon querying its system for the number of books sold this month. The query results would be huge and unpractical to manage in memory and time, and an unacceptable overhead if all you want is the count. WONDER provides a very easy way to do COUNT (and COUNT UNIQUE) queries.
23 23  * Extra qualifiers. Sometimes WO qualifiers are simply not enough. WONDER provides some handy qualifiers. Some of them are buggy and may not work, it's not one of the best quality WONDER features, but at least it's there, and it's open source, so you can fix any bugs you find.
24 +* PostgreSQL Plugin. This allows WO to be used with the popular [[PostgreSQL>>http://www.postgresql.org/]] open source database. The plugin is needed to that WO knows how to deal with primary keys, and some other details.
24 24  
25 25  There are many, many more nice things about EXExtentions framework. You would be really bored if I described only 10% of them. Besides ERExtentions, there are also a number of cool extra frameworks in WONDER. Here are some of them:
26 26  
27 -* Ajax Framework - provides a really easy way to add Ajax calls to your application. Ajax Framework integrates Ajax in the WebObjects Request-Response loop in a very intelligent way. You program all of the Ajax stuff as you program normal component actions. An action method is called, you do whatever you want, and return a component (usually null). The defined block of the page is updated. No page reload, the user is happy, and you are more than happy because you actually had to do nothing (well, almost). We'll look at Ajax Framework later.
28 -* ERJavaMail - useful framework for managing email.
29 -* ERPrototypes - A collection of data model prototypes for popular databases. You may use this framework or create your own prototypes, but **do** use prototypes. If you are lost, don't worry, we'll look at this later.
28 +* Ajax Framework. Provides a really easy way to add Ajax calls to your application. Ajax Framework integrates Ajax in the WebObjects Request-Response loop in a very intelligent way. You program all of the Ajax stuff as you program normal component actions. An action method is called, you do whatever you want, and return a component (usually null). The defined block of the page is updated. No page reload, the user is happy, and you are more than happy because you actually had to do nothing (well, almost). We'll look at Ajax Framework later.
29 +* ERJavaMail. Useful framework for managing email.
30 +* ERPrototypes. A collection of data model prototypes for popular databases. You may use this framework or create your own prototypes, but **do** use prototypes. If you are lost, don't worry, we'll look at this later.
30 30  * ExcelGenerator - A [[POI>>http://poi.apache.org/]] wrapper framework for generating Excel documents, a very useful feature in many web applications.
31 31  * ERPlot - A [[JFreeChart>>http://www.jfree.org/jfreechart/]] wrapper for generating nice-looking charts on your web application.
32 32  
... ... @@ -78,3 +78,5 @@
78 78  Done. Now you're project is linking with your framework. If you think this is overkill, think again when you need to do a maintenance application of a backoffice. You'll love the time you spent separating the model code from the application. Also, this helps you write better code, because model code shouldn't need to know anything about the presentation layer. If you try to do that in your framework, you'll get an error, so you really can't do it! :)
79 79  
80 80  If you don't want to create the model framework now, at least take the advice of keeping the model layer fully independent from the presentation layer. This will make it easier if you decide, in the future, to separate the model code to a framework as described here.
82 +
83 +[[« Overview>>Best Practices-Overview]] [[Model »>>Best Practices-Model]]