Undgå duplikeret kode i en asp.net web form applikation
HejJeg er ved at lave en CRUD web form applikation som har en index, create, update og delete .aspx side.
I min Page_Load metode på Read/Update/Delete har jeg gentagen kode som jeg ikke bryder mig om. Det er jo åndsvagt at skulle ændre kode 3 stedder hvis det er samme logik der skal bruges.
Det som koden bruges til er at tjekke om der findes data og hvilken slags data der allerede evt. måtte findes (indtil videre gemmes data i "stub" dvs i RAM, senere vil det være fil baseret).
Koden i Page_Load som pt. er copy pasted til både create,red og update er som flg:
protected void Page_Load(object sender, EventArgs e)
{
if(!hasAgents() && !hasScoundrels() )
{
ddlPersonType.Visible = false;
ddlPersonList.Visible = false;
lblInfo.Visible = true;
lblInfo.Text = "no agents or scoundrels created";
PanelAgent.Visible = false;
PanelScoundrel.Visible = false;
}
else if(!hasScoundrels())
{
if(!Page.IsPostBack)
{
ddlPersonType.DataSource = personTypes;
ddlPersonType.DataBind();
ddlPersonType.Visible = true;
}
Application["MyScoundrel"] = new ArrayList();
ListItem li = ddlPersonType.Items.FindByValue("Scoundrel");
if(li != null) ddlPersonType.Items.Remove(li);
}
else if(!hasAgents())
{
if(!Page.IsPostBack)
{
ddlPersonType.DataSource = personTypes;
ddlPersonType.DataBind();
ddlPersonType.Visible = true;
}
Application["MyAgent"] = new ArrayList();
ListItem li = ddlPersonType.Items.FindByValue("Agent");
if (li != null) ddlPersonType.Items.Remove(li);
}
else if(agentArrayList.Count > 0 && scoundrelArrayList.Count > 0)
{
ddlPersonType.DataSource = personTypes;
ddlPersonType.DataBind();
ddlPersonType.Visible = true;
}
private bool hasAgents()
{
if (Application["MyAgent"] as ArrayList == null || (Application["MyAgent"] as ArrayList).Count == 0)
{
//no agents in the list, hide controls and show msg
lblInfo.Text = "no agents created";
lblInfo.Visible = true;
PanelAgent.Visible = false;
PanelScoundrel.Visible = false;
return false;
}
return true;
}
private bool hasScoundrels()
{
if (Application["MyScoundrel"] as ArrayList == null || (Application["MyScoundrel"] as ArrayList).Count == 0)
{
//no scoundrels in the list, hide controls and show msg
lblInfo.Text = "no scoundrels created";
lblInfo.Visible = true;
PanelAgent.Visible = false;
PanelScoundrel.Visible = false;
return false;
}
return true;
}
Bemærk venligst.. at min Page_Load kalder 2 metoder hasAgents() og hasScoundrels(). Og at disse 2 metoder ændrer properties på web controls (panels , label , dropdownlist). Denne kobling gør det vel meget sværere at flytte koden ud i en ny selvstændig klasse uden at programmet "mister sin funktionalitet". ?