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

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

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

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

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

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

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

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

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

 环境介绍
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里面回个帖子,帮助大家一下,毕竟还有很多人对于三层还不是很了解(包括我在内),希望高手可以结合这个实例,用最简洁的语言讲解一下,再次谢谢!

时间: 2024-10-18 13:55:46

求助求助——请教各位高手,抽出一点宝贵的时间根据这个实例讲解一下应该如何分层呢?的相关文章

像高手求助C#内存分布情况,例如堆栈 全局静态区 代码区?最好有实例讲解?高手请进

问题描述 像高手求助C#内存分布情况,例如堆栈全局静态区代码区?最好有实例讲解?高手请进多谢多谢 解决方案 解决方案二:up解决方案三:几乎不可能谁要能知道一个程序编译后在内存中是啥样那得是编译器高手了.

请教各位高手,在。NET环境下用C#能解决蚁群算法,粒子群算法等问题吗?

问题描述 请教各位高手,在.NET环境下用C#能解决蚁群算法,粒子群算法等问题吗?虽然知道.NET环境的优势并不在解决这些算法上,但只是现在这个环境用得比较熟,现在想要用这几种算法解决点问题,大家看在这个环境下能应用好呢,还是换作VC之类的比较好呀?因为看了一点别人写的算法,用C#编的很少呀~ 解决方案 解决方案二:应该是可以的解决方案三:有了算法,就选择自己比较熟悉的工具去做吧那样自己也有信心点,呵呵解决方案四:有了算法,就选择自己比较熟悉的工具去做吧那样自己也有信心点,呵呵解决方案五:有了算

请教各位高手双色球的过滤条件中的匹配条件咋用java编写?

问题描述 请教各位高手双色球的过滤条件中的匹配条件咋用java编写? # 请教各位高手双色球的过滤条件中的匹配条件咋用java编写? 解决方案 这个不是过滤条件,谢谢你了 解决方案二: http://wenku.baidu.com/link?url=5v2AEp41c99sFSK5MQrGttwdjsLcGXb3mg7yBirtl3J4ynjLWys6fODKwAHBfzxhqtotUddlvR726ysai9iLEfKrRjMPaFK4bV8ddeC03q_ 解决方案三: http://www

c 面试题 面试-C 语言几道面试题,请教一下高手们

问题描述 C 语言几道面试题,请教一下高手们 判断题1.声明函数int fun(int a[10]);则a表示一维数组变量名. 判断题 2.char *p = "hello", char str[] = "hello";表示指针变量 p和str 都指向文字常量"hello". 问答题: 以下程序是否有误,如果无误,请写出执行次数(1 ). int x = -1; do{ x = x * x; }while(!x); 有点不确定,发上请教一下!!!

技术交流 互相讨论-求助求助!!苹果手机qq 问题

问题描述 求助求助!!苹果手机qq 问题 苹果手机点击qq消息中的链接不能直接打开,但是把链接复制到苹果自带的浏览器中却能打开.怎么回事?哪位大神帮忙解答一下 解决方案 估计是屏蔽了吧,有可能,就跟微信里面打不开淘宝链接一样,.

c语言-号外号外 acm2011求助求助跪求了

问题描述 号外号外 acm2011求助求助跪求了 不知道哪里错了快疯了 求大神指点指点 怎么看都对啊 希望大神找出错误谢谢了 解决方案 ac了 你的算法有误,a=2,然后a=-3,都没错,但是下一步a=-(a+1)=-(-3+1)=2,之后的循环就全错了 #include <stdio.h> int main(){ int m; int n; float num=1; int a=2; scanf("%d",&m); while(m--){ scanf("

我是ASP.NET的菜鸟,想请教各位高手传授些学习方法。。。。谢谢!!!!

问题描述 我是ASP.NET的菜鸟,想请教各位高手传授些学习方法....谢谢!!!! 解决方案 解决方案二:看别人的代码,自己写代码解决方案三:该回复于2008-04-10 14:54:47被版主删除

求助 求助 求助

问题描述 .将100元纸币兑换成10元.5元和1元纸币共20张,输出各种兑换法,并统计个数.c#语言用while循环作这几道题求助求助求助求助求助求助 解决方案 解决方案二:作业问同学去解决方案三:自己解决,这是最基本的解决方案四:主要算法如下:可以在此基础上进行修改成while就行了for(inti=0;i<10;i++)//如果是兑换成10元的话可以兑换10张{for(intj=0;j<20;j++)//如果都兑换成5元的可以兑换成20张{for(intk=0;k<100;k++)/

bios-求助求助~求助大神,我的电脑每次开机都是这样。

问题描述 求助求助~求助大神,我的电脑每次开机都是这样. 为什么我的电脑每次看机都是这样,虽然可以正常进入程序,但是每次都是这样 好麻烦,想问一下大神有什么好的解决办法吗?我的电脑是戴尔的,之前是Win10的系统,之后装上Win7之后出现的这种情况. 解决方案 这方面的问题我在修电脑的时候遇到过,不过不会影响系统的使用,所以我一直都没有管它的,我以前在BIOS里面调过,可是不见天又出来了,目前我是没有什么好的方法去弄这个了,朋友我劝你还是忽略的比较好,这个相当于电脑启东时的系统保护 解决方案二: