Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Violating Single Resposibility Principle using Visual Studio Region

0.00/5 (No votes)
2 Jul 2012 1  
Wherever you are using region in your method to demarcate code, you can very well put that code in a separate method.

Single Responsibility Principle (SRP) says that "THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE." Although this article mentions only about class, I think the SRP also applies to methods within the class: there should never be more than one reason for a method to change. Visual Studio provides a good way to mark off section of file in the form of "region" so they can be collapsible and the code can be organized. Many people use region in a big method to organize code. For example:

public void CreeateOrder(/*some parameters*/)
{
    #region Validate the parameters
    //code goes here
    #endregion

    #region create the order
    //insert the order data in the database
    #endregion

    #region create the order item
    //insert the item data in the database
    #endregion
}

Note that not all people use regions like this. Many people use comments instead of regions in these kind of methods. As you can see, this is a clear violation of the single responsibility principle. The method does more than one thing: it validates the order data, creates a top level order and creates order items. This can certainly be put into a separate method.

private bool ValidateOrderData(/*some parameters*/)
{
    #region Validate the parameters
    //code goes here
    #endregion
}

private bool InsertOrder(/*order related parameter*/)
{
    #region create the order
    //insert the order data in the database
    #endregion
}

private bool InsertOrderItem(/*order item related parameter*/)
{
    #region create the order item
    //insert the item data in the database
    #endregion
}

public  void CreateOrder(/*Some parameter*/)
{
    If(ValidateOrder(/*parameter list*/))
    {
        if(InsertOrder(/*order parameter*/))
        {
            InsertOrderItem(/*order item parameter*/);
        }    
    }
}

As you can see, wherever you are using "region" in your method to demarcate code, you can very well put that code in a separate method.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here