65.9K
CodeProject is changing. Read more.
Home

Violating Single Resposibility Principle using Visual Studio Region

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.50/5 (4 votes)

Jul 2, 2012

CPOL
viewsIcon

9086

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.