I've not had a lot of time recently to take a closer look at ATLAS, but today I went back and reviewed some of the functionality for some demos I had to set up. A couple of things come to mind that are immediately problematic at the lowest level, which is the Web Services Bridge.
The Web Services bridge may not be the sexiest piece of ATLAS, but it's the base for data retrieval and to me at least it provides an easy way to pull data from the server and work with the data. In fact, looking at a lot of the more advanced features it seems it's actually easier to struggle with the JavaScript yourself than let the ATLAS script code try to generate the right thing for you .
The Web Services Bridge provides the key data link for ATLAS based applications and allows accessing existing Web Service behavior via JSON based interface that is integrated into ATLAS. What's nice about this not-so new idea of using JSON in ATLAS is that it works both ways - you can push data to the client, manipulate and send it back in the same object format and the Web Service will in most cases recognize the passed back value. ATLAS provides the basic infrastructure to maintain the type information of the object which is pretty cool.
However, there are a number of issues that are problematic in order to use this in any sensible way at this time:
1. Web Service supports only property based objects
When returning objects, fields are serialized to the client just fine, but sending an object back up to the server will fail if there are any public Fields in the object definition.
2. Serialization Attributes are not respected
The WebService functionality via JSON also does not respect either [NonSerialized] or [XmlIgnore] attributes when exporting or importing resulting in problems with serialization of objects that have these attributes explicitly set to avoid generic constructor problems.
3. No exception handling
Currently there's no coherent exception handling. When an error occurs it spits back an HTML page. It sure would be nice if there was some way to marshal exceptions of some sort back to the client. SoapExceptions from the server certainly, regular exceptions for WebMethods attached to pages.
4. Object model for some complex objects is pretty non-intuitive
I was playing around with returning a DataTable to a client page directly and trying to access its functionality. While I would expect to get this documented in the future the current syntax of Table.getItem(0).getProperty('ProductName'); is kinda tedious especially since the JSON serialization appears to provide the proper naming and array structure. Wouldn't it be much easier to logical to create an array based object array that matches the structure of the table rather than an alternate definition that doesn't even match the DataTable interface in the first place?
For any sort of real work the Exception handling is a complete show stopper. The current way of returning HTML pages in response to errors is a big problem and this needs to be taken care of ASAP in my opinion. In order to do this I think the result from a remote call is going to have to include more than a single result value in order to convey both request status information and result information so that you can check when the callback returns whether an error occurred by checking an exception object or error flag etc.
This would mean instead of a straight result, you'd get a Result object, which has something like a Status object and a Value object, where the Value is actual result from the call.
Couple of more first impressions as I'm looking at this functionality and reading the message board:
The new script syntax seems pretty damn verbose to accomplish some relatively simple things. A lot of the syntax feels really non-intuitive as well as ATLAS is using some new syntax to describe the behaviors of controls. Noting some of hte messages on the forum you can see what kind of gyrations you often have to go through to accomplish a fairly simple task. It's a complex model to learn even when it ends up being just a few lines of code. The problem is that the syntax and names and behavioral is DIFFERENT than either server side markup, or client side markup, so now you're adding a a third (or fourth) set of syntax to your page layout. This is getting a little crazy. You're jumping back and forth between ASPX code layout, C# code on the server, ATLAS Client Script and JavaScript. Hello, does that strike anyone as one hell of a brain wonk? Too many freaking context switches here...
I realize that there's some definite benefit to this script abstraction, namely browser independence and managing of cumbersome display logic for browsers, but I think it's going to be real important that any new syntax that is used can address a wide variety of scenarios without breaking down, allows easily dropping down into code if necessary and is also easy to use. The latter is currently not the case. There are way too many moving parts at this point to keep straight and I'm not sure that designers are going to be able to fix that problem in the future.
Still I'm looking at ATLAS and I think there's a lot of potential there. I really hope we'll see another build soon that fixes some of the core problems so there's a bit more of a chance to do something real with this without breaking down right away... right now it's really nothing more than a very preliminary prototype.
Now playing: Die Toten Hosen - Was zählt