Thursday, December 30, 2010

I hate ASP.NET

Yes it is true – I am not going to lie about it – I hate ASP.NET… But still it has its charms – the ability to just work on every client is actually worth something. But ASP.NET solutions are really just a million pieces of crap flying in close formation so that it resembles an application…

So me being this strongly-typed person that I am, how can I still deliver ASP.NET stuff without puking all over myself from disgust?

Well I guess it is not possible to completely NOT use the ASP.NET framework – but at least I want to use it as little as possible and certainly not for very straightforward stuff like showing up business objects in a standard UI with comboboxes, edit and grids.

If I can catch what I want in a model in like 5 minutes I do not want to spend more than 5 minutes to get it up and running. If I am satisfied I can spend more time on tuning it to “perfection” (hey its ASP.NET we talk about) but the basic stuff of fetching and editing and applying and persisting – 5 minutes tops. If I can get these things going in 5 minutes – fine – otherwise I want to ship it away to India for production. In India they hate ASP.NET as well – but they love the money.

Ok – Maybe MVC is the solution – NOT! MVC breaks my fingers from typing and I am still left with the disgusting html wiring of the UI – the very thing that makes me puke and it simply takes for ever.

So what am I saying here? What is my recommendation?

Go declarative – do things only once – use a framework from the future

Using Enterprise Core Objects – the model driven framework that actually works – a.k.a ECO I create this model:

image

Notice the “/” on Order.TotalCost and on OrderItem.CostForRow – these are derived attributes. Defined in Object constraint language (OCL – a rather boring but cool OMG standard) as such:

self.OrderItem->Collect(a|a.CostForRow)->sum()

(self.Quantity*self.Article.Cost)+(self.Quantity*self.Article.Weight*self.Order.DeliveryType.CostPerKiloGram)

Ok that took me like 5 minutes – better hurry up. I create a viewmodel:

image

Sure looks like a lot of typing but since the editor is Model driven I can more or less just pick and choose:

image

Ok… Maybe I have spent another 5 minutes on this…

That means I would have 10 minutes to get it up and running in ASP.NET.

Drag on a ViewModelASPNET control on a WebForm and set its viewModelName to the name of the viewmodel from above:

<cc1:ViewModelASPNET ID="ViewModelASPNET1" runat="server" 
   AutoApplyBeforeInternalDataBind="True" 
   DataSourceID="EcoDataSource1" EcoSpaceManagerID="EcoSpaceManager1" 
   GridsHasDeleteButton="True" GridsHasEditButton="True" 
   GridsHasSelectButton="True" GridSizeFixedWithScrollbar="True" 
    ReadOnly="False" 
   ViewModelName="ViewModelOrder" 
    PostbackOnComboboxChange="true"
     CommandoColumnWidth="32"
    />

Add some styling and background images and hit F5:

image

Ah, it still looks like shit but it is working – I can now spend days on getting it to look the way I want with css. The thing is that:

The ComboBoxes shows up the correct rows
Changing a ComboBox updates the single links in the correct object
The Totalcost is updated and displayed correctly
The buttons execute the domain logic as defined.
I can select, delete or edit Grid rows.
Data is persisted on the server.
The ViewModel has ReadOnly and VisibleExpressions that controls all the webcontrols

Declarative is nice! I still hate ASP.NET though…

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home

 
Contact Us | Terms of Use | Privacy Statement © 2009 CapableObjects