OOP实体对象优化

为什么要使用实体对象

方法参数多的缺点

  1. 定义和使用不方便,很容易把参数写错
  2. 当对象的属性变化时,方法的参数必须改变
  3. 参数的改变,造成对象接口不稳定,降低了可维护性、可扩展性和安全性,与面向对象设计原则相悖
  4. 不符合面向对象中“低耦合,高内聚”的要求
  5. 后台方法编写依赖数据库完成
  6. 前台代码实现依赖后台代码方法的完成,团队中无法并行开发

问题解决思路

  1. 为类的设计提供一个规范,稳定对象的接口
  2. 不同开发人员只需要按照规范接口即可同步开发

问题解决办法

使用“实体类”作为方法参数,稳定对外接口

实体类的设计

概念

  1. 只包含属性和构造方法的类称为实体类
  2. 实体类属性和数据库实体属性一一对应(实体类中的属性和数据表中的字段的名称和数据类型保持一致)

数据库中有多少张表,程序中有多少实体类;每张表有多少列,对应的实体类有多少属性。

实体类

 class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
        public int Age { get; set; }
        public int SubID { get; set; }
    }

实体类对应的数据访问类

class StudentServer
    {
        public int AddStudent(Student stu)
        {
            string sql = string.Format("INSERT INTO Student VALUES('{0}','{1}',{2},{3})", stu.Name,stu.Sex,stu.Age,stu.SubID);
            return SQLHelper.ExecuteNonQuery(sql);
        }
        public int DeleteStudent(Student stu)
        {
            string sql = string.Format("DELETE FROM Student WHERE ID={0}", stu.ID);
            return SQLHelper.ExecuteNonQuery(sql);
        }
    }

优点

  1. 方法变得简洁,对象属性化,不影响接口的稳定性
  2. 解析对象的属性,组合SQL语句

实体类总结

深入理解实体类

  1. 实体类除了和数据表对应之外,通常都有对应的数据访问类
  2. 实体类和对应的数据访问类,其实是一个对象的属性和方法的分离,这种分离是为了更好的体现系统可维护性
  3. 实体类的使用使得程序设计人员可以完全脱离对数据库的依赖
  4. 同时界面开发人员和后台数据访问类的开发人员可以明确分工

实体类的主要作用

  1. 封装数据:将用户输入的数据或后台查询的数据,封装为实体对象,简化接口
  2. 传递数据:在用户界面和数据访问类之间传递信息
  3. 在之后面向对象设计中有其他应用

实体类在面向对象设计中的地位
OOP实体对象优化_第1张图片
使用List集合封装多个同类型对象

public List<Subject> GetSubjectList()
        {
            string sql = "SELECT * FROM Subject";
            SqlDataReader reader=SQLHelper.GetReader(sql);
            List<Subject> list = new List<Subject>();
            while (reader.Read())
            {
                Subject subject = new Subject() 
                {
                    SubID=Convert.ToInt32(reader["SubID"]),
                    SubName=reader["SubName"].ToString()
                };
                list.Add(subject);
            }
            reader.Close();
            return list;
        }

你可能感兴趣的:(OOP实体对象优化)