iT邦幫忙

0

ASP.NET C# 程式簡化相關問題

各位前輩好,小弟是ASP.NET C# 新手最近寫了幾個程式雖然功能都正常,但是對於程式簡化這部分就不是很懂,例如在Button Click Event內有許多判斷,不知道怎麼簡化程式,還請各位前輩先進指教

protected void ImageButton2_Click(object sender, EventArgs e)
    {
        this.InnerBindGrid();
        foreach (GridViewRow row in GridView3.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                SqlDataReader reader = null;
                SqlConnection con = new SqlConnection(constr);
                con.Open();
                SqlCommand cmd = new SqlCommand("select * from [B] where ([A] = 'ABC' OR [B] = 'CDE') AND User_Name=@User_Name", con);

                TextBox A_name = (TextBox)row.FindControl("A_name");
                cmd.Parameters.AddWithValue("@User_Name", A_name.Text);
                reader = cmd.ExecuteReader();
                if (reader != null && reader.HasRows && TextBox28.Text == string.Empty)
                {
                    Response.Write("<Script language='JavaScript'>alert('請確認!');</Script>");
                    Q13CheckBox.BorderColor = System.Drawing.Color.Red;
                    Q13CheckBox.BorderWidth = 2;
                    TextBox21.BorderColor = System.Drawing.Color.Red;
                    TextBox21.BorderWidth = 2;
                    TextBox28.BorderColor = System.Drawing.Color.Red;
                    TextBox28.BorderWidth = 2;
                    Consultation_Label.BorderColor = System.Drawing.Color.Red;
                    Consultation_Label.BorderWidth = 2;
                    btnShowPopup.Visible = true;
                    ClientScript.RegisterStartupScript(this.GetType(), "Popup", "ShowPopup();", true);
                    return;
                }
                con.Close();
            }
        }
        
        int rowCount = InnerGridView.Rows.Count;
        if (rowCount == 0)
        {
            btnShowPopup.Visible = true;
            ClientScript.RegisterStartupScript(this.GetType(), "Popup", "ShowPopup();", true);
            return;
        }

        if(this.TextBox28.Text != string.Empty && rowCount != 0)
        {
            SqlDataReader reader = null;
            SqlConnection con = new SqlConnection(Consultation_constr);
            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM B WHERE [A]=@A AND [B]=@B AND [C]='7304' AND [D]=@D;", con);
            cmd.Parameters.AddWithValue("@A", this.TextBox1.Text);
            cmd.Parameters.AddWithValue("@B", this.Dr_Code.Text);
            cmd.Parameters.AddWithValue("@D", this.TextBox28.Text);
            reader = cmd.ExecuteReader();
            if (reader.HasRows == false)
            {
                Response.Write("<Script language='JavaScript'>alert('請確認日期!');</Script>");
                btnShowPopup.Visible = true;
                ClientScript.RegisterStartupScript(this.GetType(), "Popup", "ShowPopup();", true);
                return;
            }
            con.Close();
        }
        if (TextBox1.Text == string.Empty || TextBox5.Text == string.Empty)
        {
            string script = "alert('請輸入申請人資料!!');";
            ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", script, true);
        }
        else
        {
            User_infor();
            Client_info();
            Submit();
        }
    }
物件導向原則SOLID之S => 單一功能原則(簡稱:單一職責)
將其加以擴大解釋,由「一個物件專一負責處理一項功能」
改成
「一個函式專一負責處理一項功能」
你看看你有多少個if,這每一個if其實都能獨立成一個函式。
當每個函式只負責處理一項任務時,你才能以這個為目的來簡化你的程式結構。

不怕你寫很多的function,怕的是你把很多code粘在一起難分難解………
小康 iT邦新手 5 級 ‧ 2018-10-31 09:30:14 檢舉
謝謝前輩指教 還有太多需學習

2 個回答

0
ant1017
iT邦新手 5 級 ‧ 2018-10-30 15:24:42
最佳解答
與其說是簡化,倒不如多找幾個方法將你想呈現的東西,用不同的方法來敘述,不僅可以增加自己的經驗,也可以比對看看,哪個工具比較方便,既然都有初始版本了,就做個第二版、第三版出來吧,多做幾次自然,做熟一點,大概就知道哪些地方可以簡化了
0

...

Homura iT邦研究生 2 級 ‧ 2018-10-31 10:19:25 檢舉

...?@@

我要發表回答

立即登入回答