今天是第三版,和前几天一样今天还是要对代码进行优化,三层架构是一种思想,具体能不能使得整个系统安全和高性能,还是要看代码编写的是否合理,逻辑性是否严谨。
昨天偶然间看到别人写的三层架构中,竟然没有在方法中传递单个参数,而是直接声明了一个对象整体的当传参。最后上网查,发现原来是在系统里多加了一层,叫做模型层,就是用来在系统的各层之间传递数据的,这样就避免了为一个方法传递多个参数现象。
具体深入的模型层使用还在学习当中,今天就用学到的一点简单的模型层知识,对代码进行再一次优化。
首相先建立一个模型层(Model)在里面创建一个实体类(person):
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Model 8 { 9 public class person 10 { 11 //员工编号 12 public string id; 13 14 public string Id 15 { 16 get { return id; } 17 set { id = value; } 18 } 19 20 //员工姓名 21 public string name; 22 23 public string Name 24 { 25 get { return name; } 26 set { name = value; } 27 } 28 29 //员工性别 30 public string sex; 31 32 public string Sex 33 { 34 get { return sex; } 35 set { sex = value; } 36 } 37 38 //员工工资 39 public string salary; 40 41 public string Salary 42 { 43 get { return salary; } 44 set { salary = value; } 45 } 46 47 //构造函数,无参 48 public person() 49 { 50 51 } 52 53 //构造函数,传入一个参数 id 54 public person(string id) 55 { 56 this.id = id; 57 } 58 59 //构造函数,传入三个参数 name, sex, salary 60 public person(string name, string sex, string salary) 61 { 62 this.name = name; 63 64 this.sex = sex; 65 66 this.salary = salary; 67 } 68 69 //构造函数,传入四个参数 id, name, sex, salary 70 public person(string id, string name, string sex, string salary) 71 { 72 this.id = id; 73 74 this.name = name; 75 76 this.sex = sex; 77 78 this.salary = salary; 79 } 80 } 81 }
然后对之前的代码进行简单的修改,在这里就不发出全部方法的更改了,其它方法类似:
先引入模型层(Model):
using Model;
default.aspx.cs代码:
1 //更改员工信息 2 protected void update_Click(object sender, EventArgs e) 3 { 4 string id = this.update_id.Text.Trim(); 5 6 string name = this.update_name.Text.Trim(); 7 8 string sex = this.update_sex.Text.Trim(); 9 10 string salary = this.update_salary.Text.Trim(); 11 12 person p = new person(id, name, sex, salary); 13 14 if (pd.update(p)) 15 { 16 this.lbl_3.Text = " * 更改成功!"; 17 } 18 }
personDAO类:
1 public bool update(person p) 2 { 3 bool flag = false; 4 5 SqlParameter[] paras = new SqlParameter[]//创建参数数组 6 { 7 new SqlParameter("@id", p.id), 8 new SqlParameter("@name", p.name), 9 new SqlParameter("@sex", p.sex), 10 new SqlParameter("@salary", p.salary) 11 }; 12 13 //使用参数数组里的值 14 string sql = "update person set [name] = @id, sex = @name, salary = @sex where id = salary"; 15 16 if (sq.ExecuteNonQuery(sql, paras) > 0) 17 { 18 flag = true; 19 } 20 21 return flag; 22 }
SQLHelper类(不改变):
1 /// <summary> 2 /// 执行带参数的增删改SQL语句 3 /// </summary> 4 /// <param name="sql">要执行的SQL语句</param> 5 /// <param name="paras">传入的参数</param> 6 /// <returns>返回受影响的行数</returns> 7 public int ExecuteNonQuery(string sql, SqlParameter[] paras) 8 { 9 int res; 10 11 cmd = new SqlCommand(sql, getcon()); 12 13 cmd.Parameters.AddRange(paras); 16 17 res = cmd.ExecuteNonQuery(); 18 19 return res; 20 }
*实体类的使用,在小项目里效果不明显,因此有很多人说,实体类可有可无,但是真正到了大型项目里面,实体类的使用使得整个系统变得更加流畅,紧密,逻辑性也更好。