One of the best ways refactors a long method is to break it up into several methods. The extract method refactoring enables you to do this by selecting a block of code and select the Extract method and create a refactored extract method. Extract Method is just a refactoring operation that provides an easy way to create a new method from a code fragment in an existing member. You can create a new method by extracting a selection of the code from inside the code block of an existing member. Take a look at this example (don’t mention about the functionality of this method, I'm just going to refactor this method)
public override string[] GetRolesForUser(string username)
{
using (var statosContext = new StatosContext())
{
var user = statosContext.Account.SingleOrDefault(u => u.UserName == username);
if (user == null)
return new string[] { };
return user.UserRoles == null ? new string[] { } :
user.UserRoles.Select(u => u.Role).Select(u => u.RoleName).ToArray();
}
}
If you are want to refactor the this, select the block of the code just like the picture
After selecting the Extract method, select a name for the extracted method (I selected RolesForUser)
public override string[] GetRolesForUser(string username)
{
using (var statosContext = new StatosContext())
{
return RolesForUser(username, statosContext);
}
}
private static string[] RolesForUser(string username, StatosContext statosContext)
{
var user = statosContext.Account.SingleOrDefault(u => u.UserName == username);
if (user == null)
return new string[] {};
return user.UserRoles == null
? new string[] {}
: user.UserRoles.Select(u => u.Role).Select(u => u.RoleName).ToArray();
}
Now, this is a refactored code on extract method. I know there was no need in this method to refactor it, but in real-world programming, you definitely will have this kind of method which should be extracted to separated methods.