C# 分层 三层架构
Hello!
三层架构↓↓↓↓↓↓
三层架构分为:表现层(UI(User Interface))、业务逻辑层(BLL(Business Logic Layer))、数据访问层(DAL(Data Access Layer))再加上实体类库(Model)
1、实体类库(Model),主要存放数据库中的表字段。
操作:
(1)先建立实体类库Model,打开项目,在解决方案中右键——>添加——>新建项目——>选中类库——>改名Model——>确定
(2)选中Model类库——>Shift+ALT+C——>建立实体类。UserInfo类
- namespace Model
- {
- public class UserInfo
- {
- public string UserName { get; set; }
- public string Password { get; set; }
- }
- }
2、数据访问层(DAL),主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作
操作:
(1)先建立数据访问层类库DAL,打开项目,在解决方案中右键——>添加——>新建项目——>选中类库——>改名DAL——>确定
(2)在DAL中添加对Model的引用,选中DAL--》Alt+P+R--》解决方案--》项目--》选中MOdel--》确定
(3)在DAL中添加对system.configuration的引用,选中DAL——>Alt+P+R——>程序集——>框架——>选中System.configuration——>确定
(4)建立数据访问类,选中DAL——>Shift+ALT+C——>建立数据访问类。UserDB类
- namespace DAL
- {
- class UserDB
- {
- private string connString = ConfigurationManager.ConnectionStrings[connString].ToString();
- public int AddUser(UserInfo userInfo)
- {
- //对数据库进添加一个用户操作
- string commandText = insert into UserInfo (userName,Password)values(@userName,@Password);
- SqlParameter[] paras = new SqlParameter[]
- {
- new SqlParameter (@userName,userInfo.UserName ),
- new SqlParameter (@Password,userInfo.Password )
- };
- return SqlHelper.ExecuteNonQuery(connString, CommandType.Text, commandText, paras);
- }
- }
3、业务逻辑层(BLL)对传送数据进行逻辑判断分折,并进行传送正确的值。
(1)先建立业务逻辑层类库BLL,打开项目,在解决方案中右键——>添加——>新建项目——>选中类库——>改名BLL——>确定
(2)在BLL中添加对Model、DAL的引用,选中BLL——>Alt+P+R——>解决方案——>项目——>选中MOdel、DAL——>确定
(3)建立业务逻辑类,选中BLL——>Shift+ALT+C——>建立业务逻辑类。LoginManager类
- namespace BLL
- {
- public class LoginManager
- {
- private UserDB userDB = new UserDB();
- public bool Add(UserInfo userInfo, out string messageStr)
- {
- messageStr = ;//返回界面层添加用户返回信息
- bool isSuccess = false;
- if (userInfo.UserName.Trim().Length != )//判断从传递来的username是否为空
- {
- if (userDB.IsEquals(userInfo))//传给DALl操作判断数据库中是否有重复值
- {
- userDB.AddUser(userInfo);//传给DAL操作增加一个新用户
- isSuccess = true;
- }
- else
- messageStr = 有相同的值;
- }
- else
- {
- messageStr = 不能为空;
- }
- return isSuccess;//返回界面层是否添加成功
- }
- }
- }
4.表现层(UI)即用户界面层
(1)在UI中添加对Model、BLL的引用,选中UI--》Alt+P+R--》解决方案--》项目--》选中MOdel、BLL--》确定
(2)编写代码传递数据给BLL层。
- UserInfo userInfo;
- LoginManager lm = new LoginManager();
- private void btnAdd_Click(object sender, EventArgs e)
- {
- userInfo = new UserInfo()
- {
- UserName = txtUserName.Text.Trim(),
- Password = txtPassword.Text.Trim()
- };
- string messageStr = ;
- if (lm.Add(userInfo, out messageStr))
- {
- MessageBox.Show(添加成功);
- }
- else
- {
- MessageBox.Show(messageStr);
- txtUserName.Focus();
- }
- }
- }
再来说一下怎么实现如下图所示 三个表的信息显示在一个控件
想要实现下图内容 , 首先要从学生表(Student)、从科目表(Subject)、从成绩表(StudentResult)分别拿到学生姓名、科目名、考试成绩和考试时间。
首先添加一个扩展类,这里要用到继承
- namespace Combox.Model
- {
- public class StudentExtens:Student
- {
- public string SubjectName { get; set; }
- public int StudentResult { get; set; }
- public DateTime ExamDate { get; set; }
- }
- }
继续DAL层
- public List<StudentExtens> SelectStudentResult()
- {
- //查看学生成绩
- List<StudentExtens> list = new List<StudentExtens>();
- SqlConnection con = new SqlConnection("Server=192.168.15.21;initial catalog=MySchool;uid=sa;");
- DataTable dt = SQLHelper.ExecuteDataTable(@"select studentname,subjectname,studentresult,examdate from student,subject,result where student.studentno=result.studentno and result.subjectid=subject.subjectid");
- foreach (DataRow item in dt.Rows)
- {
- StudentExtens se = new StudentExtens();
- se.StudentName = item["studentname"].ToString();
- se.SubjectName = item["subjectname"].ToString();
- se.StudentResult = Convert.ToInt32(item["studentresult"]);
- se.ExamDate = Convert.ToDateTime(item["examdate"]);
- list.Add(se);
- }
- return list;
- }
接下来是BLL层
- namespace Combox.BLL
- {
- public class StudentBLL
- {
- StudentDAL sd = new StudentDAL();
- public List<StudentExtens> SelectStudentResult()
- {
- return sd.SelectStudentResult();
- }
- }
- }
在UI进行调用
- StudentBLL sb = new StudentBLL();
- List<StudentExtens> list = sb.SelectStudentResult();
- dgvlist.DataSource = list;
亲们!到这里分层先告一段落。 感谢关注过我、正在关注我、将要关注我的朋友。一起努力加油!
在这个弱肉强食的时代我们只能:
狼行千里吃肉!公司里一个团队的作战能力决定你分的肉多少。
十年、二十年以后的你,会回想起现在的你。至于那个时候的你,是否会感谢现在坐在电脑屏幕前的你,答案就在我们每一天里!
爱编码爱生活爱音乐爱文字爱小M
16年三月的最后一天
- 作者:微冷的风
- 出处:http://www.cnblogs.com/smbk/
- 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
C# 分层 三层架构的更多相关文章
- 4、传统三层架构与DDD分层架构
4.传统三层架构与DDD分层架构 模型是抽象的 现实是形象的 技巧是重要的 思想是永恒的 从传统三层架构与DDD分层架构的编程演变其实是思想的演变. 传统三层架构,即用户界面层UI.业务逻辑层BAL. ...
- 关于三层架构与MVC的一些理解
刚毕业的时候,参与了一个上位机的系统开发.上位机所使用的是.net Windows Form技术. 当时,和一个北理的姑娘在一个项目组里.因为她来公司时间比较长,而且经验比较丰富,所以,上位机的架构由 ...
- 【转】浅谈MVC与三层架构
首先给大家引入下MVC的概念: MVC(Model View Controller)模型.视图以及控制器,它是一种较为广泛应用的结构设计模式. 模型:就是在MVC设计模式中需要被显示的数据.在通常情况 ...
- 有了门面,程序会更加体面!- pos软件基于三层架构 -09
续上篇) 大鸟说道:“实际上没有学过设计模式去理解三层架构会有失偏颇的,毕竟分层是更高一级别的模式,所谓的架构模式.不过在程序中,有意识的遵循设计原则,却也可以有效的做出好的设计.” ...
- 浅析MVC模式与三层架构的区别01
三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...
- 三层架构与MVC之间的区别
文章转发自:http://www.admin10000.com/document/535.html 我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真 ...
- MVC模式与三层架构的区别
之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...
- 三层架构与MVC & 设计模式的较量
刚刚学习了三层架构,并且正在实际应用中,但随着学习的深入,又了解到了一个叫MVC的东西,(早在设计模式中就听到过MVC,仅仅是简单查了一下什么意思.)如今正好把这三个东西放在一起聊聊. 三层 是一个分 ...
- 三层架构和MVC模式
目录[-] 1.三层架构 2.MVC 2.1 标准的MVC(Model-View-Controller) 2.2 Web MVC 3.三层架构和MVC的区别与联系 1.三层架构 三层架构(3-tier ...
随机推荐
- 批量Ping IP
刚刚接触Python 想做点什么 听说Python 在网络方便很厉害 后来总结如下: 第一:发现公司都固定IP 每次新来同事都要猜一个没有人用的IP 很费劲 第二:我们公司有的IP可以上QQ 有的不 ...
- 【Java】深入理解ThreadLocal
一.前言 要理解ThreadLocal,首先必须理解线程安全.线程可以看做是一个具有一定独立功能的处理过程,它是比进程更细度的单位.当程序以单线程运行的时候,我们不需要考虑线程安全.然而当一个进程中包 ...
- 聊一聊google的Knowledge Graph
什么是Knowledge Graph? 它是google用于增强它的搜索引擎的功能和提高搜索结果质量的一种技术.在2012年5月16日提出,除了提供基本的与主题相关的链接服务之外,它还能结构化与主题相 ...
- Ubuntu 12.10
上海交通大学更新服务器(教育网千兆接入,联通/电信线路情况不详),包含其他开源镜像: deb http://ftp.sjtu.edu.cn/ubuntu/ quantal main multivers ...
- Linux curl使用简单介绍
在两台新搬迁的微信服务器上执行命令: curl -H "Content-Type: application/json" -d '{"partner_no":&q ...
- 爬虫技术 -- 进阶学习(七)简单爬虫抓取示例(附c#代码)
这是我的第一个爬虫代码...算是一份测试版的代码.大牛大神别喷... 通过给定一个初始的地址startPiont然后对网页进行捕捉,然后通过正则表达式对网址进行匹配. List<string&g ...
- mockito
import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWit ...
- AEM - Adobe CMS 扒坑记之始
AEM是Adobe公司所出的商业内容管理系统,全称阿豆比体验管理系统(Adobe Experience Manager),其前身叫CQ,分别有CQ5 CQ6两个大版本.它提供了整套的网站内容管理系统解 ...
- 网站跨站点单点登录实现--cookie
至于什么是单点登录,举个例子,如果你登录了msn messenger,访问hotmail邮件就不用在此登录.一般单点登录都需要有一个独立的登录站点,一般具有独立的域名,专门的进行注册,登录,注销等操作 ...
- Socket.IO 1.0 正式发布,快速可靠的实时引擎
Socket.IO 是目前 Web 领域最火的实时引擎,用于实现基于事件的双向实时的通信.它适用于任何平台,浏览器或设备,专注于可靠性和速度.您可以将数据推送到客户端,并获得实时的计数,日志或图表. ...