in C#

Decoupled Code using SubSonic

Subsonic is fantastic when generating a bunch of classes directly from the database structure…but the issue comes when OO/Application Objects clash with relational database structures.   An idea is to use Subsonic to query the data from the database and map the data directly to a application/OO object.

A really good example following the link below is to have a Product class that has a various number of attributes.  When you query data from the database using Subsonic you can do the following:

return Northwind.DB.Select("ProductID", "ProductName", "UnitPrice")

//where Product is a Application Object.

This attempts to map the data to ProductID, ProductName and UnitPrice attributes in the Product object.

Another example is to create a new application object that inherits from your subsonic generated class.
This is really handy if you want to extend and add custom business logic.

public class PersonObj : Person //Person is the SubSonic generated class
    public void ResetSubscription()
        SubscriptionDate = DateTime.Now; //Call the SubscriptionDate database field
        ExpiryDate = DateTime.Now.AddYears(1);
        Save(); //Commit the changes back to the database

return Select()
                .From<Person>().ExecuteSingle<PersonObj>().ResetSubscription(); //Notice the PersonObj on the end