zoukankan      html  css  js  c++  java
  • 求助求助——请教各位高手,抽出一点宝贵的时间根据这个实例讲解一下应该如何分层呢?

     有很多的问题没有明确,比如三层架构的定义到底是什么呢?(有些人说我的是分层,有的说不是。我个人感觉还是分层了)
    各个层的定义又是如何呢?
    每个层里都需要实现什么功能,放哪些代码呢?

    这些好像都并不是很明确。

    常常可以看到两个人(或多个人)讨论的很激烈,但是到最后才发现其实讨论的的东东并不完全一致。虽然都是用了数据访问层(或是逻辑层)的名词,但是各自的理解却是不一样的。

    大家在理论上的讨论比较多,但是具体到一个实例上的却比较少,有的话也是个说各的,不够统一,影响理解。

    这里本人斗胆,定了一个命题,邀请各路高手针对这个实例来讨论一下,如何划分层次,哪些代码应该放在哪些层里面等问题。
    谢谢大家的帮忙。

    题目很简单 —— 实现一个添加数据的功能。

    说明:简单,才可以更明晰、快速一些,让更多的人更容易地看懂。

    简单的都没有分清楚的话,复杂的就更晕了呀。:)

     环境介绍
    IDE:vs2003
    语言方面:asp.net 1.0、ADO.NET 1.0、
    数据库:Server SQL 2000

    实现的功能:项目里的一个简单但是很常用的功能 —— 填加数据。再具体一点,新闻系统里的添加新闻的功能。(注意:只是添加新闻,不包括显示数据等功能)。具体一点可以更有的放矢。

    数据库说明:
    新闻表(LayerDemo_News)
    字段暂时定义为:
    ID:NewsID (数据库自动生成)
    标题Title、 (用户添加)
    分类(一级分类)ClassID、(用户添加)
    编辑Editer、(用户添加)
    内容Content、(用户添加)
    发布时间AddedDate、数据库自动生成)
    人气Hits。(数据库自动生成。默认值:0)

    这里要添加四个字段。


    下面按照完全“一层”的方式来编写代码。不能使用自定义的类。
    (代码会比较长,所以这里并不会写全,只写出说明和主要的代码。其实也没有必要写全嘛。呵呵)

    为了说明的方便,给代码加上一个标识J 主要讨论 A部分之外的部分。

    //===============A部分 aspx页面里的代码==============
    这个就不写代码了,绘制一些文本框,下拉列表之类得控件了。还有格式之类的事情
    另外还要写一些js脚本来验证数据。(偷懒的话也可以不写)
    //====结束====


    // aspx.cs页面里的代码。这里面要再细分一下。
    //另外说明一下,下面的代码都会写在“保存按钮”的点击事件里面。

    //==================B部分 获取新闻信息==============
    定义变量,获取用户添加的新闻信息,同时去掉两端的空格,并且过滤“’”
    例如:
    string NewsTitle = this.Txt_Title.Text.Trim().Replace(“‘”,””);
    其他省略
    代码行数:大于等于字段数(
    >= 4)。
    //====结束====


    //==================C部分 验证数据==============
    这里要做一些安全验证和逻辑验证,比如新闻标题不能为空、是否重复之类。
    安全验证一个要处理“‘”,另一个就是,如果字段类型是数字的就要验证是否是数字了。
    (本着不能相信页面传过来的数据的原则,一些信息还要重复验证一遍,呵呵)

    如果数据不合格,要给用户显示提示信息,并且终止事件的继续执行。
    如果数据合格继续执行。

    具体代码略。
    代码行数:大于4行,小于 不详。根据实际情况来决定,这里就不好确定了。
    //====结束====


    //==================D 部分 填写数据==============
    数据验证完毕,可以写到数据库里面了。
    这里就有个分支了。基本上可以分为三种情况:组合Insert into 语句、使用带参数的Insert into 语句、存储过程。
    不管用哪种方法,都要先定义一个Connection 对象和一个command 对象。其他得根据情况来定了。
    SqlConnection cn 
    = new SqlConnection(…); 
    SqlCommand cm 
    = new SqlCommand 

    (使用的是一层的方式,所以需要写出Connection之类的代码)
    组合Insert into 语句 :行数会比较少,但是很不易读,一些人也会说不太安全。

    带参数的Insert into 语句:行数会比较多;需要一个长一点的SQL语句,需要一个存储过程的参数的数组,并且赋值;比较安全。

    存储过程:行数和带参数的方式基本一样;需要在数据库里编写一个存储过程,需要一个存储过程的参数的数组,并且赋值;很安全。

    具体代码略。
    代码行数是少不了,基本上会比添加字段数的两倍还要多一些。

    //====结束====


    //==================E部分 异常判断==============
    往数据库里添加数据要做一下异常的判断,用 try 的方式,要套在 D部分的代码的外面。
    如果发生异常了要给出说明(针对程序员的说明,和针对用户的说明两种),
    对程序员的要尽量详细地说明出错的地方和出错信息,以便于程序员能够尽快修改错误;
    对客户的就要友好一些了。

    具体代码略。
    没有异常的话要给出添加信息成功的提示。

    //====结束====



    基本上填加数据的工作就完成了,当然这里只是一个部分,实际中还会再加一些代码。先以这些为准吧。

    (如果您感觉我写的代码不对,也欢迎您拍板砖。)

    那么请各位高手帮帮忙,对于这个实例,您会如何分层呢?或者说怎么拆分这一大段代码呢?


    http://community.csdn.net/Expert/TopicView3.asp?id=4957543

    这是 csdn 里的帖子,也希望各位高手能到csdn里面回个帖子,帮助大家一下,毕竟还有很多人对于三层还不是很了解(包括我在内),希望高手可以结合这个实例,用最简洁的语言讲解一下,再次谢谢!
  • 相关阅读:
    网络通信之 字节序转换原理与网络字节序、大端和小端模式
    [C/C++]大小端字节序转换程序
    面向对象和面向过程的区别
    编译libjpeg
    地形系统lod
    c/c++ 代码中使用sse指令集加速
    个人作品- 蘑菇大战
    个人作品- 几何战争
    Obj格式模型 读取
    各大引擎矩阵的矩阵存储方式 ----行矩阵 or 列矩阵
  • 原文地址:https://www.cnblogs.com/jyk/p/480001.html
Copyright © 2011-2022 走看看