views:

111

answers:

2

Building decent RIA data-intensive crud-like application is still hard. In spite of existence tons of frameworks.

I'm going to build my own framework for such kind of applications. One of key requirements is scaffolding (generating UI from model). Another is .NET server-side. I know about asp.net dynamic data, oracle ADF, fornax/sculptor etc. (yeah, the two latters are for Java). There are many server-side frameworks like Django (python-based), Grails (Groovy-based), ruby on rails. They usualy contain some ORM and kind of scaffolding. But the major problem for me is that they don't contain client-side framework. They do generate scaffolding UI code but it can't be reused in code written by hand. I also don't like asp.net WebForms' approach with "server controls". Even if all server markups (like or similar JSF/JSP) are generated.

On the other hand there are (even more) client-side frameworks. They're usualy server-tech agnostic. Here we have Dojo, ExtJS, SmartClient, QooxDoo and others.They all offer us to write JS-code and do some css/html design. It's not bad, but JS-code (as it's a scripting code) is very errorprone.

So my initial vision was to take asp.net mvc for server-side and take some nice client-side framework. The problem is which one to choose.

My first decision was to take Dojo toolkit. It's a framework with many goodnesses for JS (mixins, pub/sub, connections, Defered, modules, Json parser, Dijit's templating, Data abstractions) and it has many widjets. And it's free.

But than I looked at ExtJS. I haven't dived in learning it yet. But their demo is very nice. It seemed to me that GUI's quality is much better than Dojo's widjets have. But ExtJS costs money for commercial using. But paying money for a good framework is not big problem.
Then I looked at SmartClient. Expecialy at SmartGWT's showcase. I must say everybody choosing an Ajax framework/library must see that. It's absolutly awesome. It's a client library (SmartClient) incorporated into GWT. So we can create an astonished Ajax app with Java. With compiled language, with no scripting language! Great! But they have even more - SmartGWT EE. It seamlessly integrate client code (generated from Java) with server Java objects, providing two-way data-binding between data model (connected with server) and GUI controls.
It's kind of what I need, but I need such a thing for .NET. Yes, I know about Script#. But it's very limited (c# 1.0). There's also jsc. It works, even debbuging. But it's far from GWT+SmartGWT's facilities.

So, after looking at such a beauty, building a framework with asp.net mvc+dojo doesn't seem to be a good idea anymore.

I'm sure many of you faced the similar problems: how to effectively connect Ajax RIA client-side with server-side in data-intensive crud-like (often enterprise/intranet) applications (not web sites). So what approached/technologies else does make sense to consider?

p.s. I'm even considering using GWT. But I have to use two IDE: one for client code (java) and other for server code (asp.net mvc). But that isn't edge of dreams.

+1  A: 

There are various similar questions that address most of what you're asking. Check these out and see if they help:

Which Javascript framework (jQuery vs Dojo vs … )?

What JavaScript library would you choose for a new project and why?

ExtJs Vs Ext GWT Vs SmartGWT

Is smartclient suitable?

etc...

bmoeskau
+1  A: 

If reusable scaffolding is a key concern, this is one of SmartGWT/SmartClient's strongest points. See how little code is required for a fully functioning CRUD screen here:

http://www.smartclient.com/smartgwt/showcase/#featured_pattern_reuse

And note that you can do very fine-grained overrides of model-generated UI while still avoiding duplication:

http://www.smartclient.com/smartgwt/showcase/#layout_form_databinding

True, there's no SmartGWT EE for .NET, however integration with .NET is pretty straightforward using the RESTDataSource:

http://www.smartclient.com/smartgwt/showcase/#restfulds_xml_integration_category

And one option for deriving DataSources from your existing objects/tables is to use SmartGWT's ability to read XML schema:

http://www.smartclient.com/smartgwt/showcase/#featured_xsd_ds

You can use this in conjunction with DataSource inheritance, eg, you can declare that a DataSource that is configured to talk REST to your server inherits it's field definitions from a DataSource that is derived automatically from XML Schema:

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/DataSource.html#setInheritsFrom%28com.smartgwt.client.data.DataSource%29

Charles Kendrick
@Charles, thanks for the answer. One thing I'm a bit confused about SmartGWT: you bind grid and editor to the same datasource. But editors often need more comprehensive facilities. For an instance, we often edit nested objects with sub editors and save everything in one transaction. So how well do SM's datasources support nested objects?
Shrike
I guess you're from Isomorphic, right? If so, I'd like to note that if you create some integration with .net platform it'd amazing. Also asked about that here: http://forums.smartclient.com/showthread.php?t=12211
Shrike
Master-detail is highly automatic as well: http://www.smartclient.com/smartgwtee/showcase/#master_detail_batchNote if you're on .NET, you need to use RestDataSource here instead of the pre-built Hibernate connector available for Java servers. You're then going to get a nested JSON or XML document POST'd to your server, which you can then save to SQL or whatever your storage system is.
Charles Kendrick