• (转)三层相关案例(及常见的错误)


    原文地址:http://www.cnblogs.com/zysbk/archive/2012/10/16/2726895.html

    三层相关案例(及常见的错误)

    今天我们再次带领大家学习三层的知识,由于三层这块的内容在工作中用的比较的多.所以,我再把登录验证密码的题目做一遍.题目中没有了验证用户是否存在.

    先回顾一下上次我们给大家看的两个图:

    一、三层架构图

    二、两个案例的流程图

    今天我们建三个项目,这个方便我们看清三层。

    三、建好界面层

    四、建好的三层

    SqlHelper是操作数据库的,和数据库有关,在数据访问层。添加一个引用。

    我们把配置文件也先放在数据访问层里面。将配置文件中的相关信息改好。

    下面我们还是先画下界面层的界面。

    五、画好界面层

    下面的步骤我们再复习一下:

    1. 根据需求分析Sql语句

    selectcount(*)fromT_SeatswhereCC_LoginId=@uidandCC_LoginPassword=@pwd

    当登录成功之后,第一在窗体的上方显示欢迎xxx,第二要记住登录的主键Id。

    查主键Id和真实姓名。

    selectcc_autoId,cc_userNamefromT_SeatswhereCC_LoginId=@uidandCC_LoginPassword=@pwd

    2. 数据访问层

    想一下执行第一条Sql语句需要调什么方法?

    执行第二条Sql语句需要调什么方法?

    确定下数据访问层的类。

    六、验证登录是否成功方法的代码

    七、写好model

    八、写好数据访问层的代码

    3.确定BLL业务逻辑层

    九、创建好类,添加引用,写好MD5

    十、写好业务逻辑层

    十一、添加两个引用,写好存数据的类,及代码

    十二、写好界面层的代码

    调试的时候出现错误,大家也来想一想哪儿出现了错误呢?

    表明SqlHelper中读取字符串出现错误。

    查了之后,还没有读到这,那可能就是配置文件的问题。

    刚才我们把配置文件放在了数据访问层,为什么不能放在数据访问层呢?

    十三、系统报错,及修改思路

    另外,如果不想在界面层做一堆的逻辑判断的话,把我们刚在里面写的逻辑判断,再封装成一个方法。

    确定BLL业务逻辑层:根据需求确定需要几个方法,以及每个方法的参数与返回值等。

    十四、把登录成功的用户名显示到窗口的左上角

    下面我们做下修改密码,修改密码跟用户登录思路差不多.也是确定SQL语句,数据访问层,业务逻辑层,写好界面层.

    十五、修改密码界面层一

    十六、修改密码界面层二

    十七、显示修改密码按钮及弹出第二个窗体

    好了,现在我们想下修改密码我们用到了哪些SQL语句?

    一条是:判断旧密码是否正确。

    一条是:修改新密码。

    //验证旧密码的sql

    select count(*) from T_Seats where CC_AutoId= @autoId and

    CC_loginPassword= @oldPwd

    //执行修改密码

    update T_Seats set CC_LoginPassword = @newpwd where cc_autold= @autold

    有了这两个SQl语句,我们该写数据访问层那两个方法了。

    十八、验证旧密码,修改密码数据访问层代码

    数据访问层写好,我们就改写业务逻辑层了。业务逻辑层有什么的方法取决于现在的需求。

    验证新密码是否一致,旧密码是否正确,确定它修改是否成功。封装一个方法,最后根据需求返回不同的值。

    十九、写好业务逻辑层

    接着我们在界面层调用一下。

    二十、最后写好界面层的代码

    二十一、校验程序

    接下来我们说下用三层完成递归加载,和递归删除

    为了方便我还是建在同一个应用程序里面。

    还是写三层的步骤,现在要实现递归加载需要什么样的SQL语句。

    根据父Id获取子类别,接下来写数据访问层。

    单独建个表

    二十二、递归加载准备工作

    二十三、储存数据的model类

    二十四、数据访问层的方法

    要做递归加载就用到这么一个数据库的操作方法。接下来写业务逻辑层的方法,这个时候业务逻辑层没有什么逻辑处理的工作,就是拿到数据就行了,就是个打酱油的。

    二十五、递归加载的两种写法

    二十六、业务逻辑层用紧耦合的方法

    二十七、把递归加载写到业务逻辑层中

    二十八、最后改下配置文件和启动窗体

    二十九、递归加载结果演示

    这样写行不行?合适不合适?

    不合适,为什么呢?在业务逻辑层用到了窗体中的类。当我把界面换成web之后,业务逻辑层中用的就不是这些了。

    这个逻辑应该写到界面层,作为界面层的逻辑。

    上面的写法是专门为windows窗体写的逻辑,紧耦合。

    要是一个字符串的话,就是松耦合。因为任何的程序都有。

    三十、在界面层的代码

    下面我们做下删除节点,极其子节点:

    大家还是想一下,当我点击按钮之后执行什么样的SQL语句。

    还是先写数据访问层:

    三十一、删除-数据访问层代码

    三十二、删除-业务逻辑层代码

    三十三、删除-界面层

    三十四、怎么拿到bll层

    作者近期文章列表:

    C#基础教程(完全免费,献给代码爱好者的最好礼物。注:本作者分享自己精心整理的C#基础教程,无任何商业目的。
    希望与更多的代码爱好者交流心得,也请高手多多指点!!!)
    三层 三层(一)
    SQL数据库 ADO.net 数据库的应用图解一
    数据库的应用详解二
    ADO.NET(内涵效率问题)
    面向过程,面向对象中高级 面向过程,面向对象的深入理解一
    面向过程,面向对象的深入理解二
    面向对象的深入理解三
    winform基础 Winform基础
    winform中常用的控件
    面向过程 三种循环的比较
    C#中的方法(上)
    我们常见的数组
    面向对象 思想的转变
    C#中超级好用的类
    C#中析构函数和命名空间的妙用
    C#中超级好用的字符串
    C#中如何快速处理字符串
    值类型和引用类型及其它
    ArrayList和HashTable妙用一
    ArrayList和HashTable妙用二
    文件管理File类
    多态
    C#中其它一些问题的小节
    GDI+ 这些年我收集的GDI+代码
    这些年我收集的GDI+代码2
    HTML概述以及CSS 你不能忽视的HTML语言
    你不能忽视的HTML语言2精编篇
    你不能忽视的HTML语言3
    CSS基本相关内容--中秋特别奉献
    CSS基本相关内容2
    JavaScript基础 JavaScript基础一
  • 相关阅读:
    Linux 3.2中回写机制的变革
    Linux字符设备与块设备的区别与比较
    分布式文件系统:原理、问题与方法
    为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?
    Linux IO barrier
    磁盘IO:缓存IO与直接IO
    【珍藏】高性能IO模型浅析
    souretree+上面提交代码和gerrit上面出现Cannot+merge的时候的解决方法
    vscode快速生成自定义HTML模板
    在jq里面设置样式的高度height、设置隐藏和显示的小功能
  • 原文地址:https://www.cnblogs.com/fcsh820/p/2728881.html
Copyright © 2020-2023  润新知