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

[C#学习笔记27]高内聚低耦合思想与实体集合封装、模块化分层与三层结构

2020-10-04 21:59 作者:技术龙的传人  | 我要投稿

基于实体对象的数据返回

通过实体类封装了零散的参数,打包后给数据访问方法。数据访问方法需要把数据返回给UI,数据是多条,也就是多个实体、零散的数据。应把数据封装到实体类中,泛型集合List<T>是实体的容器,把每条数据封装成实体对象后再放到List集合中,用List集合作为方法的返回值。

优点:UI部分不需要知道数据访问是从哪里查询数据的,只使用集合即可(高内聚低耦合)

数据访问部分只需把数据封装到集合中,UI是winform、web都没关系

查询结果对象封装的时候也是比较麻烦,可以使用ORM框架解决。

使用模块化分层思想来达到其业绩项目要求

基本的分层:UI+数据访问+实体类(典型两层结构)

模块:在.NET平台是指类库项目

一个模块可以包含或多个类库项目(dll)

项目中包含的模块:

UI

数据模块:数据访问类+通用数据访问类

业务模块:三层结构必备的

通信模块、通用类模块、服务模块

三层结构

UI——业务模块——数据模块       实体模块是独立层

公司上层——中层(部门经理)——员工

业务模块作用:传递业务请求;业务分解

实现:添加4个模块(类库)

添加解决方案MyProject,类库BLL(业务逻辑类CourseManage.cs)、DAL(数据处理类CourseService.cs、SQLHelper.cs)、Models(实体类Course.h、Course.cs、CourseCategory.cs、Teacher.cs)

添加引用:UI——BLL——DAL(Models)

分层优点:

不管哪层业务变化,都不会影响其他层

后续升级也带来很大的方便

团队开发更方便

CourseManager.cs内容如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using DAL;

using Models;

namespace BLL

{

/// <summary>

/// 业务逻辑类两个职责

/// 1、业务传递——隔离

/// 2、业务处理——大项目中使用

/// </summary>

public class CourseManager

{

private CourseService courseService = new CourseService();

public int AddCourse(Course course)

{

return courseService.AddCourse(course);

}

public int DeleteCourse(Course course)

{

return courseService.DeleteCourse(course);

}

public object GetCourseCount()

{

return courseService.GetCourseCount();

}

public List<Course> QueryCourseById(int courseId)

{

return courseService.QueryCourseById(courseId);

}

}

}

CourseService.cs内容如下:

using Models;

using System;

using System.Collections.Generic;

using System.Data.SqlClient;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace DAL

{

public class CourseService

{

/// <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);

}

/// <summary>

/// 查询课程总数

/// </summary>

/// <returns></returns>

public object GetCourseCount()

{

string sql = "select Count(*) as 课程总数 from Course";

return SQLHelper.GetSingleResult(sql);

}

/// <summary>

/// 根据课程编号查询,返回集合对象

/// </summary>

/// <param name="courseId"></param>

/// <returns></returns>

public List<Course> QueryCourseById(int courseId)

{

string sql = $"select CourseId,CourseName,CourseContent,ClassHour,Credit,CategoryId,TeacherId from Course where CourseId<{courseId}";

//return SQLHelper.GetReader(sql);

SqlDataReader reader = SQLHelper.GetReader(sql);

List<Course> list = new List<Course>();

while (reader.Read())

{

list.Add(new Course//下面要读取的属性名必须在上面sql语句只能够出现,否则会出现找不到的情况

{

CourseName = reader["CourseName"].ToString(),

CourseContent = reader["CourseContent"].ToString(),

ClassHour = Convert.ToInt32(reader["ClassHour"]),

Credit = Convert.ToInt32(reader["Credit"]),

CategoryId = Convert.ToInt32(reader["CategoryId"]),

TeacherId = Convert.ToInt32(reader["TeacherId"]),

CourseId = Convert.ToInt32(reader["CourseId"])

});

}

reader.Close();

return list;

}

}

}

SQLHelper.cs内容与之前的一致,修改namespace为HAL

Course.cs内容与之前的一致,修改namespace为Models

CourseCategory.cs内容添加属性方式与Course.cs一致

Teacher.cs内容添加属性方式与Course.cs一致

Program.cs内容如下:

using Models;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using BLL;

namespace MyProjectUI

{

class Program

{

static void Main(string[] args)

{

List<Course> courseList = new CourseManager().QueryCourseById(104);

foreach (var item in courseList)

{

Console.WriteLine(item.CategoryId + "\t" + item.CourseName + "\t" + item.Credit);

}

Console.Read();

}

}

}

App.config内容如下:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<startup>

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />

</startup>

<connectionStrings>

<add name="connString" connectionString="server=.;database=CourseManageDB;uid=sa;pwd=123456"/>

</connectionStrings>

</configuration>


[C#学习笔记27]高内聚低耦合思想与实体集合封装、模块化分层与三层结构的评论 (共 条)

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