2007-06-23

I've changed my mind on MonoRail

It is amazing!

I'll leave that previous post just in case anyone ever needs to create an ECO object instance first and then connect it with an EcoSpace afterwards, but you don't need it for MonoRail!

  public void Join([EcoDataBind("User")]User user)

{

PropertyBag["User"] = user;

if (this.Params["User.FirstName"] != null)

{

GetErrors(user.AsIObject(), Errors);

if (Context.Params["ConfirmEmailAddress"] != user.EmailAddress)

Errors.Add("Email address confirmation does not match email address.");

if (Errors.Count == 0)

{

//TODO EcoSpace.UpdateDatabase();

Redirect("Account", "Home");

}//No errors

}

}


That's all there is to it now! I have created a small set of classes to enable ECO support in MonoRail. Instead of descending your controllers from SmartDispatcherController you will now descend from EcoSmartDispatcherController. This gives the following abilities:

  1. The EcoSpace instance is created automatically for each request.

  2. If the EcoSpace is dirty at the end of the request it is serialized and stored in the Session. Next request it is deserialized from the Session instead of being created new.

  3. You can use the [EcoDataBinder] attribute as displayed above. This will ensure that the object instance of the parameter type is created within the EcoSpace of the controller. No need to modify your business classes at all. Form data is automatically bound to the object, and when posted the binding is automatically reversed.

  4. You can add the ExternalId to your form as a hidden input like so $EcoFormHelper.ExternalId("User", $User).



I really hope I don't find an insurpassable obstacle with this framework, because I can really see myself liking it!

No comments: