我需要幫助來重構此代碼示例的一些部分,其中if (_obj is Application)
因此這將是通用的。重構C#代碼(幫助改進)
public override void Body(object _obj, object _objInPreviousState)
{
if (_obj != null)
{
string Message = "";
string Subject = "";
if (_objInPreviousState == null)
{
var emailParams = this.Param as Dictionary<string, string>;
if (emailParams != null)
{
Message = emailParams["Message"];
Subject = emailParams["Subject"];
}
}
var emails = userRepository().GetForRoles("RM").Select(c => c.Email);
if (_obj is Application)
{
var app = (Application)_obj;
var appInPreviousState = _objInPreviousState as Application;
if (appInPreviousState == null)
{
emailService().SendEmails("[email protected]", emails.ToArray(), Message, Subject);
}
else if (app.ApplicationStatus != appInPreviousState.ApplicationStatus)
{
emailService().SendEmails("[email protected]", emails.ToArray(), "Application: " + app.ID + " changed decision status: " + Enum.GetName(typeof(AppStatus), app.ApplicationStatus), "Check following application: " + app.ID);
}
}
else if (_obj is Product)
{
var product = (Product)_obj;
var prodInPreviousState = _objInPreviousState as Product;
if (prodInPreviousState == null)
{
emailService().SendEmails("[email protected]", emails.ToArray(), Message, Subject);
}
else if (product.ProductStatusType != prodInPreviousState.ProductStatusType)
{
emailService().SendEmails("[email protected]", emails.ToArray(), "Product: " + product.ID + " for application " + product.ApplicationID + " changed decision status: " + Enum.GetName(typeof(AppStatus), product.ProductStatusType), "Check following application: " + product.ApplicationID);
}
}
else if (_obj is CES)
{
var ces = (CES)_obj;
var cesInPreviousState = _objInPreviousState as CES;
if (cesInPreviousState == null)
{
emailService().SendEmails("[email protected]", emails.ToArray(), Message, Subject);
}
else if (ces.Status != cesInPreviousState.Status)
{
emailService().SendEmails("[email protected]", emails.ToArray(), "CES for application " + ces.ApplicationID + " changed decision status: " + Enum.GetName(typeof(CesStatuses), ces.Status), "Check following application: " + ces.ApplicationID);
}
}
else if (_obj is Comment)
{
var comment = (Comment)_obj;
emailService().SendEmails("[email protected]", emails.ToArray(), "Comment for the following application: " + comment.ApplicationID + " with message: " + comment.Message + " on date: " + comment.CreatedDate, "Comment for the following application: " + comment.ApplicationID);
}
mLog.InfoLine("Sendet Email");
}
}
你意思是通用的,如'Generic'(參見http://msdn.microsoft.com/en-us/library/512aeb7t(v=vs.80).aspx)或只是使用'接口'多態性罰款? –
StuperUser
2012-04-25 13:43:59
基本上看你的代碼中的重複項目,並考慮如何使這些可重用。我要做的第一件事是將if語句更改爲case語句,並將所有下線處理移至單獨的方法中。你也可以看看Coderush這樣的工具。 – Brian 2012-04-25 13:45:08
也許這個問題可以更好地放在http://codereview.stackexchange.com – 2012-04-25 13:47:30