欢迎光临散文网 会员登陆 & 注册

[C#学习笔记26]数据和UI分层的OOP理论、分层方法、实体类封装与解析

2020-10-02 22:57 作者:技术龙的传人  | 我要投稿

用分层的思想设计企业级项目

对象职责明确原则,具有高可靠性、高性能、高维护性

1、在UI中,后台数据访问的代码和UI数据展示的代码,混编到一起。给团队协作带来困难,后续维护不方便

2、代码不优雅,各个功能耦合在一起,不符合OOP高内聚低耦合的做法

解决方法:按任务职责开发数据库应用程序,会有一些类的划分

1、UI用来和用户交互,给用户展示数据、获取用户数据

2、数据访问类,用来封装数据库操作的各种方法

1)使用通用数据访问类SQLHelper

2)各种数据访问方法的封装,通用一般的数据访问类

数据传递顺序:UI——>一般数据访问类——>通用数据访问类

优点:

1、UI不知道数据存到哪儿,符合“高内聚低耦合”

2、数据访问类不用关心数据从哪儿来,职责明确

UI和数据访问之间达到解耦目的,对后续项目扩展有利。

在[C#学习笔记25]的工程基础上,新建文件夹Service存放类SQLHelper和新建的类CourseService

新建的类CourseService.cs内容如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace SQLTest

{

namespace SQLTest

{

/// <summary>

/// 课程数据访问类

/// </summary>

public class CourseService

{

public int AddCourse(string courseName,string courseContent,int classHour,int credit,int cateforyId,int teacherId)

{

string sql = "Insert into Course(CourseName,CourseContent,ClassHour,Credit,CategoryId,TeacherId)";

sql += $"values ('{courseName}','{courseContent}',{classHour},{credit},{cateforyId},{teacherId})";

//执行SQL语句

return SQLHelper.Update(sql);

}

}

}

Program.cs添加方法如下:

public static void AddCourse()

{

//通过窗体或web页面获取数据

//1、获取用户输入的信息:用户输入的每一项数据保存到局部变量中

Console.WriteLine("请输入课程名称:");//模拟从界面输入

string courseName = Console.ReadLine();

string courseContent = ".NET框架";

int classHour = 100;

int credit = 22;

int cateforyId = 11;

int teacherId = 102;

//2、调用后台数据访问方法

int result = new CourseService().AddCourse(courseName, courseContent, classHour, credit, cateforyId, teacherId);

//3、显示操作结果

Console.WriteLine("受影响行数="+ result);

}

方法参数的定义:

1、方法参数控制在1~4个最好

2、鉴于UI和数据访问类交互参数过多问题,使用“实体类”代替过多的参数

实体类:表示数据实体的类(数据表中的一条数据就是一个实体)

实体类设计一般只包括属性,并且属性和数据表的列是映射关系

数据表列名称遵循Pancal命名法

数据表有多少列就至少有多少属性

数据类型要一致

int——int

字符类型——string(char、varchar、nvarchar、text...)

浮点型——double

smalldatetime——DataTime

实体类名称与数据表名称一致

实体类个数:有多少数据表就应该有多少实体类,根据需要添加扩展的实体类

实体类作用:

封装数据:调用对象时把参数封装到实体类的属性中(参数打包)

传递数据:将数据通过实体类传递给被调用者,反之亦然

项目中通常先添加实体类,然后再增加数据访问类和其他业务类

数据访问类命名:实体类名+Service

业务逻辑类命名:实体类名称+Mananger

实体类优点:方法调用之间的参数变得精简;使用方便,UI只需把数据封装到实体类中;使方法调用的接口变得非常稳定。

添加实体类Course.cs并放在新建文件夹Modles

Course.cs中内容如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace SQLTest

{

/// <summary>

/// 课程实体类

/// </summary>

public class Course

{

public int CourseId { get; set; }

public string CourseName { get; set; }

public string CourseContent { get; set; }

public int ClassHour { get; set; }

public int Credit { get; set; }

public int CategoryId { get; set; }

public int TeacherId { get; set; }

}

}

CourseService.cs添加增删内容如下:

/// <summary>

/// 添加课程(通过实体类作为参数)

/// </summary>

/// <param name="course">课程对象</param>

/// <returns></returns>

public int AddCourse(Course course)

{

string sql = "Insert into Course(CourseName,CourseContent,ClassHour,Credit,CategoryId,TeacherId)";

sql += $"values ('{course.CourseName}','{course.CourseContent}',{course.ClassHour},{course.Credit},{course.CategoryId},{course.TeacherId})";

//执行SQL语句

return SQLHelper.Update(sql);

}

/// <summary>

///  删除采用对象,ORM框架中全部采用对象

/// </summary>

/// <param name="course"></param>

/// <returns></returns>

public int DeleteCourse(Course course)

{

string sql = "delete from Course where CourseId="+course.CourseId;

return SQLHelper.Update(sql);

}

Program.cs添加增删方法如下:

public static void AddCourse1()

{

//通过窗体或web页面获取数据

//1、获取用户输入的信息:用户输入的每一项数据保存到局部变量中

Console.WriteLine("请输入课程名称:");//模拟从界面输入

//封装对象:将传递的数据封装到实体属性中

Course course = new Course() {

CourseName = Console.ReadLine(),

CourseContent = ".NET框架",

ClassHour = 111,

Credit = 22,

CategoryId = 11,

TeacherId = 104

};

//2、调用后台数据访问方法

//int result = new CourseService().AddCourse(courseName, courseContent, classHour, credit, cateforyId, teacherId);

int result = new CourseService().AddCourse(course);

//3、显示操作结果

Console.WriteLine("受影响行数="+ result);

}

//删除课程对象

public static void DeleteCourse()

{

Course course = new Course { CourseId=22};

int result = new CourseService().DeleteCourse(course);

Console.WriteLine("受影响行数=" + result);

}


[C#学习笔记26]数据和UI分层的OOP理论、分层方法、实体类封装与解析的评论 (共 条)

分享到微博请遵守国家法律