One Softie’s experience

26 February, 2007 (20:01) | .NET, .NET Tools, Software Architecture, RoR

Microsoft centric developers aka “Softies” (like myself) have very little exposure to MVC and Action Frameworks. In reading “Rails for Java Developers” I see again and again how RoR is built in many ways like Struts and Spring and how ActiveRecord resolves many of the same issues that Hibernate addresses.  So I can only imagine that a typical Softie would approach RoR with the same curiosity accorded to other development tools, like Subsonic or even LLBLGen for example. As it stands there is no straight comparison between these technologies.

Some would argue that code behind files are the equivalent of the controller in an MVC model. That assumption is incorrect. Code behind is more akin to a View Helper but not the same as a controller. The reason being plain and simple that in a well constructed MVC system, the controller can be used to drive all sorts of front ends and in our Softie world the code behind is pretty well married to either a web page or windows form.  

I have to tell you that without some of the work we did for SkillJam Technologies in 2005/2006 I would  not know or appreciate these systems. Again, as a typical Softie one has very little exposure to this approach. It reminds me of trying to explain the color blue to blind person – or being married to a single person. Its an experiencial thing. But once you’ve seen it work … oh boy you don’t ever want to go back to the old way of building apps.

It is remarkable to me that both the Java based world of Struts and Ruby on Rails world have the notion of a routing table. In the .NET community there is no equivalent, save perhaps the Windsor project and PathNET ( to tout our own horn a little bit) The PathNET framework that Dan and I have deployed at SkillJam contains a routing table . As a matter of fact, PathNET is essentially very similar to Struts and RoR in its ability to map a call like http://download.skilljam.com/WebSite/Site/Downloads/Login to an action that intercepts the Request and based on a routing table takes appropriate actions (hence Action Framework) . The whole concept is so similar to RoR and Struts that it just tickles me.

There are other aspects of the Java / RoR universe that maybe foreign to Softies.We are just now getting into the idea of entity objects and a first class Object Relational Mapper in ADO.NET 3.x ( all the LINQ technology). Mind you the best product of this breed has been around for 5 years – LLBLGen. Trust me when I say it is better than LINQ and better than even Hibernate. But alas, I imagine Microsoft’s Evangelism and Marketing engine will advertise LINQ  to such an extend that those few of us who are pointing the way to a better product will be drowned out completely by the collective hype generated. Bummer. I am really not looking forward to all the wannabe’s who have been spreading the Gospel Of The Stored Procedure changing their tune and talking about ORM technology as though they had invented it.

Anyway is there a point to this post? Why yes! I want to go on record as saying that PathNET with its ActionFramework and usage of LLBLGen can hold its own with many of the areas of Java Frameworks and RoR.>We even have scaffolding thanks to a beta that LLBLGen is putting out.

And more importantly PathNET has something that RoR or equivalent Java tools do not have . It’s called ActiveContent, and it is basically the marriage of an Action Framework to a Content Management System which builds on the unmatched capabilities of ASP.NET.  Microsoft did “wrap” all aspects of a web application when they released ASP.NET. We take advantage of this fact by providing a way to relate content to actions and those actions to server controls. I know this sounds a little abstract, especially if you have never seen an Action Framework do its thing, but trust me this is some very cool technology. I hope to find some sort of paid project work that allows us to continue the work on this tool. Imagine being able to change the way an application executes without having to mess with the code of the app.

At SkillJam we dealt with a company that had 100+ partners, each of which had a slightly different looking site (some more drastically different than others) . Rolling out a Partner Site was always a pain point for the team, especially when there was a lot of custom work to be done. PathNET was well on its way to allow non technical people to change a site design including the way code executed and the workflows of an application without writing code.

Unfortunately SkillJam imploded under some business management issues. If we would have had another 6  moths of concentrated develioment we could have finished this tool. Bummer.

Anyeway. PathNET does stack up pretty well in a comparison. We are short on some of the Testing goodness that is built into RoR. And while RoR has migrations we have versioned instances of ORM models.  Nonetheless PathNET has best of three worlds in severla key areas

Key Technology

Java

Ruby on Rails

PathNET

MVC

Struts / Spring

ActiveView

Action Framwork

ORM

Hibernate

ActiveRecord

LLBLGen

Scaffolding

-

Yes

Yes

Unit Tests

 

Yes

No

Active Content

-

-

Yes

Server Controls

-

-

Yes

 

Comments

Comment from jc
Date: 3/21/2007, 11:40 am

According to ScottGu, linq has all sorts of great hooks to allow frameworks to work with it. SQLMetal will compete, but LINQ seems to just be declarative language that you can hook into with any framework. For example Linq on an XML file (XLinq) produces different results than Linq on a data file (DLinq).

Hopefully LLBLGen Pro will update the framework to work seemlessly with LINQ (LLBLinq) and the language enhancements of C# 3.0. Using blocks and linq features could seriously fix a lot of the problems with LLBL (their Filtering and Sorting object model is really hard to write and maintain).

Comment from Thomas
Date: 3/24/2007, 8:51 am

jc — I know what you mean about filtering being hard to understand with llblgen. But I have to say in its defense it is based on solid object structures whereas linq ends up using some sort of pseudo sql declarative code which is problematic when you get into more complex scenarios. First its a problem because it doesnt seem to adhere to proper sql standards. Secondly its an even bigger issue when it comes time to debug because it introduces declarative code that is not compiler checked or anything. Lets say you have a complex filter - in linq you may not know its broken or whats broken because the logic is declarative - while other systems similar to llblgen can quickly pinpoint that issue.

Pingback from wagnerblog.com » ScottGu bucks the trend and runs the risk of….. succeeding !
Date: 12/3/2007, 10:41 am

[…] into System.Web, is something that Dan and I have been using for quite some time. Our framework PathNET has had MVC for almost 2 years. Thanks to Dan mostly (gotta give the guy some props). So having MVC […]

Write a comment