==================================================
有关讲座公告:
http://bbs.51aspx.com/showtopic-2114.html==================================================
2008-03-12 15:03:20
很高兴能在这里给大家讲点东西
2008-03-12 15:03:28 feixiang()
我也高兴
2008-03-12 15:03:48
这也是 51aspx 的第一次在线讲座
2008-03-12 15:03:56 蒙古利亚()
1、在主讲人讲座的时候,因为讲座群内人比较多,所以请勿插话。打断,询问
2008-03-12 15:04:16
我主要讲的是关于三层结构方面的一些知识
2008-03-12 15:05:09
如果其中有一些错误的地方,一会儿我们可以讨论,并修正
2008-03-12 15:05:29
首先,我想说一下 工程 这个东西
2008-03-12 15:06:27
我不是要给 工程 一个学术定义
2008-03-12 15:07:10
一个"庞大"的,具备创造性的活动
2008-03-12 15:07:17
这个就是工程
2008-03-12 15:07:43
在工程中会考虑一些问题
2008-03-12 15:08:01
但在工程中不会过分的考虑微观问题, 而是考虑宏观问题.
2008-03-12 15:08:18
例如怎样实现一个邮件群发功能?
2008-03-12 15:08:54
一个 while 不就全出去了?
2008-03-12 15:09:31
但是很多网友都会问这样的问题, 封邮件, 最终收到的只有 10封
2008-03-12 15:09:50
没有可靠性
2008-03-12 15:10:04
从 工程 角度来讲, 会考虑这个问题
2008-03-12 15:10:16
如何提高软件的可靠性?
2008-03-12 15:10:43
而不会考虑如何修改GridView?使其具备邮件编辑能力...
2008-03-12 15:11:12
更不会考虑, 邮件的背景该是什么颜色? 要不要加个花边 什么的
2008-03-12 15:12:00
就拿盖房子这件活动来举例
2008-03-12 15:12:17
在盖房子的工程中,会考虑房子的功能实现
2008-03-12 15:12:40
房子是干嘛的??
2008-03-12 15:12:52
房子是用来供人居住的!
2008-03-12 15:13:09
而不是用来扑灭恒星的火焰.
2008-03-12 15:13:36
但是在盖房子的过程中
2008-03-12 15:13:55
我们不会考虑每块砖头的大小,质地,颜色,重量,性别等等这些因素
2008-03-12 15:14:34
我们的目标是: 只要盖好了, 能住人, 就 OK!
2008-03-12 15:15:17
不会去精细到每块砖头, 或者是每颗钉子
2008-03-12 15:15:52
这里要记住, 房子 必须 能住人
2008-03-12 15:16:17
换句话说, 能住人 是 房子 的"功能需求"
2008-03-12 15:16:49
如果你盖的房子, 无法满足这个 "功能需求" 的话, 那么你盖的就不是 房子
2008-03-12 15:17:42
你写了一个发邮件系统, 可是, 它除了能删除 C:\windows 以外, 什么都干不了
2008-03-12 15:17:51
那么这个就不是邮件系统了
2008-03-12 15:18:00
病毒 那是
2008-03-12 15:18:31
所以要记住 "功能需求" 这个词儿
2008-03-12 15:18:35
呵呵
2008-03-12 15:18:51
但仅有功能需求还不够...
2008-03-12 15:19:22
我还是以盖房子这件事情来举例子
2008-03-12 15:19:49
假如你通过1024天的寒窗苦读,终于掌握了盖房子的技术.你下山了(出山了)...
2008-03-12 15:20:25
你负责北京地区的住宅建设问题
2008-03-12 15:20:47
你盖好了很多非常漂亮的平房小院
2008-03-12 15:20:52 飞翔()
我宣布退群,起义了,困了,无聊
2008-03-12 15:21:03
晕
2008-03-12 15:21:15 蒙古利亚()
讲得很通俗 希望大家有点耐心
2008-03-12 15:21:15 __aNd1.coder()
别理他..
2008-03-12 15:21:23 ぁ唯有魅影ぁ()
要有耐心。。
2008-03-12 15:21:26
很多人住进去, 觉得很舒适
2008-03-12 15:21:32 ぁ唯有魅影ぁ()
刚刚那个是冷雨夜来的。别理他
2008-03-12 15:21:33
可是...
2008-03-12 15:21:56
可是最终你却发现,北京市的所有建筑用地被你盖了个净光,但还是败于人口数目众多的问题
2008-03-12 15:21:59 /ch分头诗人()
继续,我在认真听。
2008-03-12 15:22:30
你该的是房子么??
2008-03-12 15:22:33
是!
2008-03-12 15:22:38
因为它能住人
2008-03-12 15:22:52
但是它不能住更多的人...
2008-03-12 15:23:30
你写的是邮件系统么?
2008-03-12 15:23:33
是!
2008-03-12 15:23:44
因为它的确发出邮件去了
2008-03-12 15:23:58
但是它不能一口气发 封
2008-03-12 15:24:14
为此,你会一筹莫展...
2008-03-12 15:24:25
不过最后灵光一现,"把平房小院纵直的叠在一起"
2008-03-12 15:24:31
于是"高楼大厦"这个词因你而诞生于世.
2008-03-12 15:24:52
不仅仅是房子
2008-03-12 15:24:59
而且能容纳很多人
2008-03-12 15:25:14
同样年轻的你负责东京的住宅建设问题
2008-03-12 15:25:29
你盖好了很多非常漂亮的平房小院
2008-03-12 15:25:39
可是最终你却发现
2008-03-12 15:25:50
在一次强度为0.009级的地震中,你的房屋全部倒塌了
2008-03-12 15:26:06
每天都会地震,每天房屋都会倒塌,你败给了频繁的地震问题
2008-03-12 15:26:15
你盖是房子么?
2008-03-12 15:26:16
是!
2008-03-12 15:26:25
因为它能住人
2008-03-12 15:26:33
但是它不抗震
2008-03-12 15:26:46
你写的是邮件系统么?
2008-03-12 15:26:47
是!
2008-03-12 15:26:56
因为它的确发出邮件去了
2008-03-12 15:27:23
问题是, 在网络环境不稳定的时候, 它什么都不是了
2008-03-12 15:27:38
为此,你一筹莫展
2008-03-12 15:27:52
不过最后灵光一现,"加入钢筋混凝土"
2008-03-12 15:28:06
于是在一次999.9级的地震中,你的房子屹立在辽阔的废墟中
2008-03-12 15:28:26
同样都是房子
2008-03-12 15:28:36
同样都是要住人
2008-03-12 15:28:39
同样的你
2008-03-12 15:28:56
只是不同的地理位置
2008-03-12 15:29:04
房子就会具备不同的特性...
2008-03-12 15:29:16
一个可以解决人口数目众多的问题
2008-03-12 15:29:27
一个不怕超级地震
2008-03-12 15:29:50
这也是房子的一种要求,一种需求,"非功能需求"!
2008-03-12 15:30:10
房子可以住人,而且还必须能住很多的人.
2008-03-12 15:30:20
房子可以住人,而且还能抗震.
2008-03-12 15:30:42
非功能需求 和 功能需求 同等重要
2008-03-12 15:30:56
可以说: 功能需求 + 非功能需求,组成了一个完成项目!
2008-03-12 15:31:20
那么这些和我要讲的三层结构有什么关系呢??
2008-03-12 15:31:39
有很大的关系
2008-03-12 15:32:01
三层结构主要是用来解决"非功能需求"的
2008-03-12 15:32:18
这点得注意
2008-03-12 15:32:58
有很多网友问我说, 三层结构到底有什么用?? 代码复杂, 添加一个功能要改三个地方
2008-03-12 15:33:22 /shd闪电/shd()
通俗
2008-03-12 15:33:29 蒙古利亚()
老师前面讲的是不是为什么要用三层啊[表情]
2008-03-12 15:33:40
根本看不到易于维护
2008-03-12 15:33:42
对
2008-03-12 15:33:57 蒙古利亚()
嗯 很通俗
2008-03-12 15:34:21
如果, 世界上只有一个人, 那个人就是你, 你盖一个平房就非常可以了
2008-03-12 15:34:59
如果, 世界上只有两台计算机, 那么你写的邮件系统, 能发送一个邮件就可以了
2008-03-12 15:35:06 ツ絕非遊戲ギ()
强烈要求互动
2008-03-12 15:35:29 /shd闪电/shd()
将完了再互动吧
2008-03-12 15:35:44
问题是 世界上有 60ww 人
2008-03-12 15:36:02 Summer杨()
注意: 谁在中间说话 就 T了哈 不会再次警告
2008-03-12 15:36:11 ╃聽兲甴掵╄()
我现在对三层一点也不了解!~我觉得很复杂!
2008-03-12 15:36:19
问题的考虑方式就真的得变了
2008-03-12 15:36:37 __aNd1.coder()
嘘..跟着思路走..
2008-03-12 15:37:12
呵呵, 讲到现在, 我只是想说清楚, 三层到底在干什么? 为什么要用它?? 它能解决什么问题?
2008-03-12 15:37:33 蒙古利亚()
讲师自由安排,请大家耐心听讲,不要打断,请讲师继续。。
2008-03-12 15:38:01
要记住的是, 不要用三层来解决 不断变化的 "功能需求"
2008-03-12 15:38:25
而是来解决复杂的 "非功能需求"
2008-03-12 15:39:00
如果这个方向给搞错了, 哎呀, 或许你会迷糊很长时间
2008-03-12 15:39:53
在一个软件项目, 一个工程里, 非功能需求可以是
2008-03-12 15:40:03
可维护性
2008-03-12 15:40:29
代码得简单易懂, 添加新功能得方便
2008-03-12 15:40:37
可扩展性
2008-03-12 15:40:54
可靠性
2008-03-12 15:41:09
就例如, 发 封邮件出去
2008-03-12 15:41:17
安全性
2008-03-12 15:41:27
可延展性
2008-03-12 15:41:51
可延展性是指, 可以通过添加服务器的办法来缓解软件压力
2008-03-12 15:42:10
因为优化程序的成本, 可能非常高
2008-03-12 15:42:19
比买一台服务器还贵
2008-03-12 15:42:44
三层结构,在可延展性上,是比较好的
2008-03-12 15:43:57
好了, 理论说了很多, 下面从实际代码学习三层结构
2008-03-12 15:44:17
我写了一个名字叫做 TrackingNewssy 的项目
2008-03-12 15:44:55
下载地址是
http://bbs.51aspx.com/showtopic.aspx?page=end&topicid=2130 2008-03-12 15:45:12
一个极为简陋的新闻系统
2008-03-12 15:46:01
能不能称得上新闻系统, 其实我也没有信心. 太简陋了...不过作为教学实例, 能说明问题就好
2008-03-12 15:46:04
呵呵
2008-03-12 15:46:52
[图片]
2008-03-12 15:47:12
这个是 TrackingNewssy 的用例( Use Case )图
2008-03-12 15:47:21
都能看到么?
2008-03-12 15:47:28 ╃聽兲甴掵╄()
恩、
2008-03-12 15:47:38 __aNd1.coder()
可以
2008-03-12 15:47:45 Sam()
当然
2008-03-12 15:47:51 漆そ-黑の瞳()
没箭头
2008-03-12 15:48:03
从图中可以得知, 该系统只有四个功能
2008-03-12 15:48:17
呵呵, 漆そ-黑の瞳, 说得对
2008-03-12 15:48:26
提醒我了,呵呵
2008-03-12 15:48:29 漆そ-黑の瞳()
呵呵
2008-03-12 15:48:55
首先使用该系统的用户类型有两个
2008-03-12 15:49:04
一个是 来宾用户 Guest
2008-03-12 15:49:17
一个是 管理员用户 Manager
2008-03-12 15:49:41
来宾可以查看新闻, 还可以给该新闻发表评论
2008-03-12 15:50:07

附件:
您所在的用户组无法下载或查看附件2008-03-12 15:50:25
而管理员可以登录系统,和发送新闻
2008-03-12 15:50:40

附件:
您所在的用户组无法下载或查看附件2008-03-12 15:50:59
很简单的一个系统
2008-03-12 15:52:10
用户可以通过Default.aspx 页面查看新闻列表, 还可以通过 ViewNews.aspx 查看新闻全文, 也可以在该页面中发表评论
2008-03-12 15:53:07
而管理员要通过 EditNews.aspx 页面编辑新闻, 则必须先通过 AdminLogin.aspx 登陆
2008-03-12 15:53:21 ╃聽兲甴掵╄()
老师!打扰一下。。。
2008-03-12 15:53:28
??
2008-03-12 15:53:42 漆そ-黑の瞳()
?
2008-03-12 15:53:59 ╃聽兲甴掵╄()
您讲的例子是哪个包,有两个啊!~
2008-03-12 15:54:04 一半情弧()
问题速度
2008-03-12 15:54:06 __aNd1.coder()
?
2008-03-12 15:54:15 冷雨夜()
速度
2008-03-12 15:54:19 __aNd1.coder()
继续..
2008-03-12 15:54:27 詼飛メ煙滅ツ()
你不会两个全下啊.
2008-03-12 15:54:29 胡枫()
T
2008-03-12 15:54:35
好, 别急, 我继续
2008-03-12 15:54:47 蒙古利亚()
提问暂停,讲师继续
2008-03-12 15:55:22
好, 故事就是从这里
2008-03-12 15:55:48
TrackingNewssy0 是一个新闻系统, 而且一直都运行的很好
2008-03-12 15:56:00
这个系统也是小靳很得意的系统,必定工作时间还不长就完成了如此庞大的软件.
2008-03-12 15:57:08
(为了教学方便, 我把它缩减的很简陋, 只有 4 个页面. 但是请你把它想象成拥有 400 .aspx 为扩展名的大型项目)
2008-03-12 15:57:18
400 个
2008-03-12 15:58:18
有一天老板K叫小靳去办公室,他说:"小靳啊,咱们网站流量越来越大,TrackingNewssy系统很棒!"
2008-03-12 15:58:45
小靳显得很得意... [表情]
2008-03-12 15:59:07
老板K:"不过最近有用户反应说网站速度有点慢,你改改吧".
2008-03-12 15:59:27
小靳心想这回又来事了... [表情]
2008-03-12 15:59:44
老板K:"是不是Access2000数据库不成?所以网站速度才慢的?要不咱换成SQLServer2000吧!".
2008-03-12 16:00:05
老板K:"这事情要尽快完".
2008-03-12 16:00:18
小靳[表情]
2008-03-12 16:00:38
其实, 要把数据库从Access2000改成SQLServer2000不难
2008-03-12 16:00:52
导入导出数据,修改一下连接就可以了
2008-03-12 16:01:04
要修改代码也不难
2008-03-12 16:01:16
不就是把OleDbConnection改成SqlConnection
2008-03-12 16:01:30
把OleDbCommand改成SqlCommand
2008-03-12 16:01:52
简单的要命
2008-03-12 16:02:12
可难就难在aspx页面太多了
2008-03-12 16:02:21
400 多个
2008-03-12 16:02:33
得挨着个的改
2008-03-12 16:02:47 漆そ-黑の瞳()
。。。。。。==
2008-03-12 16:02:53 漆そ-黑の瞳()
提问个
2008-03-12 16:02:54
大家可以看看 TrackingNewssy
2008-03-12 16:03:00 漆そ-黑の瞳()
提问个
2008-03-12 16:03:00
TrackingNewssy0
2008-03-12 16:03:12 漆そ-黑の瞳()
你的连接不是写在配置里的?
2008-03-12 16:03:16
所有的页面都需要改动
2008-03-12 16:03:22
是的
2008-03-12 16:03:32 __aNd1.coder()
兄弟..现在老师在说TrackingNewssy0
2008-03-12 16:03:30 漆そ-黑の瞳()
那只要改以个啊
2008-03-12 16:03:42 __aNd1.coder()
一层的..
2008-03-12 16:03:44 蒙古利亚()
警告:漆そ-黑の瞳
2008-03-12 16:03:44 COL亂()
命名空间要改滴.
2008-03-12 16:03:45 漆そ-黑の瞳()
额。。。。。
2008-03-12 16:03:55 漆そ-黑の瞳()
继续
2008-03-12 16:03:59
先听我说
2008-03-12 16:04:02 蒙古利亚()
请讲师继续。。
2008-03-12 16:04:41
把连接字符串放进 Web.Config, 的确是个标准做法
2008-03-12 16:04:53
但是代码是这样写的:
2008-03-12 16:05:22
OleDbConnection dbConn = new OleDbConnection(ConfigurationManager.ConnectionStrings["TrackingNewssy.Access2000"].ConnectionString);
OleDbDataAdapter dbAdp = new OleDbDataAdapter(SQL_GetNewsList, dbConn);
2008-03-12 16:06:15
如果你只是将连接改一个, Server=.; uid=sa; pwd=; DataBase=TrackingNewssyDB
2008-03-12 16:06:46
那么也就是说: dbConn = new OleDbConnection("Server=.; uid=sa; pwd=; DataBase=TrackingNewssyDB");
2008-03-12 16:06:52
这样可能会抱错
2008-03-12 16:07:22
这要看 OleDb 是否可以兼容 SQLServer
2008-03-12 16:08:26
老板K说:"Oracle10g万岁", 那光修改 Web.Config 是没有用了
2008-03-12 16:08:24
如果可以的话,
2008-03-12 16:08:39
这样的话你就必须修改代码了
2008-03-12 16:09:10
因为 OleDbConnection 肯定不能识别 Oracle 数据库连接字符串的
2008-03-12 16:09:38
我们不说 Oracle, 之说说 SQLServer2000
2008-03-12 16:10:22
要想支持 SQLServer, 你就必须改 OleDbConnection 为 SqlConnection
2008-03-12 16:10:34
这样的话, 你就得改代码
2008-03-12 16:11:20
怎么改?倒是容易, 问题是地方太多了
2008-03-12 16:11:33
一个个的改, 浪费时间
2008-03-12 16:11:37 冷雨夜()
替换
2008-03-12 16:11:45
聪明!
2008-03-12 16:12:01
呵呵
2008-03-12 16:12:02 /ch分头诗人()
容易出错
2008-03-12 16:12:07
恩, 对
2008-03-12 16:12:48 /ch分头诗人()
如果我定义了一个变量:string SqlConnection_test 这个变量也替换了,老师继续
2008-03-12 16:12:55
如果不小心谨慎的话, 在查找与替换的时候,可能会有遗漏,或者造成别的错误
2008-03-12 16:13:02 一半情弧()
一出错就错上加错了
2008-03-12 16:13:44
遗漏了某些地方改得不彻底.最后还得让老板K怒斥道:"就这么点事情,还搞得拖拖拉拉的?!"
2008-03-12 16:14:08
小靳沉思...
2008-03-12 16:14:21
...
2008-03-12 16:14:26
当初为什么不把所有的对数据库操作的代码放到一个类里?统一调用??
2008-03-12 16:14:47
这样要改数据库代码的话,修改这一个类不就完事了?
2008-03-12 16:15:16
为什么不这么做啊? 于是 TrackingNewssy1 就诞生了...
2008-03-12 16:15:40
打开 TrackingNewssy1 你会看到项目中多了一个 DBTask 目录
2008-03-12 16:15:46
这里面有两个类
2008-03-12 16:16:23
NewsTask, 还有 CommentTask
2008-03-12 16:16:51
这两个类里都是数据库操作代码
2008-03-12 16:17:16
在页面代码上, 就看不到有操作数据库的了
2008-03-12 16:18:01
在页面上只能看到调用这两个类的代码, 例如 (new NewsTask()).Append(...);
2008-03-12 16:18:55
假如有一天, 老板K:"小靳啊,你用过Oracle10g吗?听过那个挺好的"
2008-03-12 16:19:19
小靳就不怕了
2008-03-12 16:20:11
因为只修改 NewsTask, CommentTask 这两个类, 就可以使 TrackingNewssy1 运行在 Oracle 数据库上了
2008-03-12 16:20:56 冷雨夜()
就是数据层,全的修改被
2008-03-12 16:20:57
这就是一个很简单而层结构
2008-03-12 16:21:06
二层结构
2008-03-12 16:21:31
它达到了 易于维护 这个要求
2008-03-12 16:22:52
好了, 今天我就先讲到这里. 在以后的讲座里, 会有更多深人的东西