牛腩视频之系统总结
牛腩通过63集视频向我们展示了制作一个网站的全过程,所谓麻雀虽小但五脏俱全。作为初学者,我很乐意剖析并总结这些知识点,点成线,线成网,让它们变成我的东西,融于我的知识,我编程的生命中。
废话不多说,让我们看看他都讲了什么?
一、文档的编写。(牛腩视频第02~05集)
刚才已经说了,牛腩向我们展示的是一个制作网站的全过程,所谓全过程,作为一个网站的开发,前期的文档驱动必不可少的。
因为网站比较小,而且又是一个人在编写,所以,也许牛腩向我们展示的文档编写可能不会那么严格规范,但是还是那句话,该有的都有了,我们也能在后期的代码编写中,反复看到牛腩返回去参照文档去做,可见文档的重要性。其实在学C/S的时候,已经过多阐述了文档的重要性,在这里不赘述了。在这里我主要根据牛腩讲师的文档进行简单说明。
二、数据库实现,并编写D层代码。(牛腩视频第06~16集)
在这个阶段涉及到了很多数据库的知识。涉及到SQL语句创建表,编写SQLHelper,防SQL注入,主外键,触发器,存储过程等知识点。
1、创建数据库和表
建表和库的两种方式:
实例对比:
使用SQL Server2008建表的示例图:
使用SQL语句建表的示例图:
小结:前面已经说了一些这两种方法的优缺点了,在这里就说一下我自己的理解,因为之前做的系统一直很小,我又很懒,所以一直使用SQL Server2008直接建库和表,感觉挺麻烦的,因为很多字段都是重复性的,而且我又需要手动去修改和做,有些自己想要添加的功能,却找不到在哪设置,但是这次跟着牛腩老师敲就不一样了,感觉还是直接写SQL语句简单方便,而且实用性很强,尤其是需要创建大量表格的时候,工作量可想而知,但是如果使用SQL语句,很多都可以粘贴复制过来,就减少了大半的工作量了,而且感觉直接写SQL语句建表,好专业哦,哈哈,作为一个编程人员,这绝对是必备技术,所以,在这里建议同学们在以后的数据库中设计时,多多使用SQL语句,真的很方便好用哦。
2、编写SQLHelper,防SQL注入
SQLHelper是什么?
SqlHelper是用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。
小结:虽然之前用过SQLHelper,但是是直接用的,没有SQLHelper的演化过程,牛腩老师在这里带着我们做了一遍SQLHelper的制作过程,让我对SQLHelper有了一个更加深入的理解,提炼加工,整合架空,SQLHelper更给我一种框架的感觉,让参数,连接字符串从SQLHelper中过一遍,我们就可以实现数据库连接和增删改查的操作了,解耦在这里体现的很彻底啊。
另外,我们还在这里提到了SQL注入的问题,somebody想要盗取或是破坏我们的程序时,就会使用sql语句的相关语句,混淆命令,为了防止这种情况的发生,我们在这里采用了SQL参数查询的方式避免这种行为,在这里就不累述,我会在后续的文章中专门写一篇关于SQL注入的问题,敬请关注我的后续文章。
3、主外键,触发器,存储过程的使用
主外键(主要是保持数据的完整性和一致性):
触发器(一种特殊类型的存储过程):
触发器是不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活,在牛腩新闻发布系统中,我们通过触发器,实现删除类别下的新闻和评论,实现了数据库中相关表的级联更改。
在这里值得注意的是,触发器是基于一个表创建的,但是可以针对多个表进行操作,而存储过程则是基于数据库创建的。
示例(删除类别触发器的代码):
USE [newssystem]GO/****** Object: Trigger [dbo].[trigCategoryDelete] Script Date: 08/23/2013 14:52:18 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author: 张薄-- Create date: 2013-8-7 14:50-- Description: 删除类别触发器-- =============================================ALTER TRIGGER [dbo].[trigCategoryDelete] ON [dbo].[category] instead of DELETEAS BEGINdeclare @caId intselect @caId=id from deleted --删除评论delete comment where newsId in(select newsId from news where caId =@caId)--删除新闻delete news where caId =@caId--删除类别delete category where id =@caId END
存储过程:
大家都知道SQL语句的增删改查吧,那么我认为存储过程就是一组SQL语句的组合,其用途也是对数据库进行相应操作,内容也是增删改查,不过就是组合后对单个或多个表的的增删查改。而且存储过程第一次执行编译后,编译好的代码就会存储在高速缓存中便于调用,提高了代码的执行效率。
示例(取出最新十条新闻的代码)
USE [newssystem]GO/****** Object: StoredProcedure [dbo].[procNewsSelectNewNews] Script Date: 08/23/2013 15:31:04 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author: 张薄-- Create date: 2013-8-8 8:55-- Description: 取出最新10条新闻(所属分类,新闻标题,发布时间)-- =============================================ALTER PROCEDURE [dbo].[procNewsSelectNewNews]ASBEGINselect top 5 n.id ,n.title ,n .createTime ,c .name,c.id as caIdfrom news ninner join category c on n .caId =c .id order by n .createTime descEND
三、三层架构(牛腩视频第17集)
在B/S的开发中我们还应用到了三层架构的思想。Web表现层,数据访问层,还有中间的业务实现层。真正的实现了三层架构,每一层独立,就比如我们做新闻发布系统,一开始只是实现了数据库和数据访问层的代码,然后根据D层的接口,实现B层的业务处理,最后的Web表现层,根据D层的接口,调用B层相应的方法,并传递相应参数。
因为之前已经系统的学过三层的知识了,在这里不赘述,有兴趣的可以看我之前的博客(《三层架构简介》),在这里只是简单的提一下。
四、前台界面设计(牛腩视频第17~35集)
详见博文:
《CSS的基本认识》
《div,css,html ,table 各种认识和组合对比》
《比较div+css 和table》
五、整合页面(牛腩视频第36~61集)
详见博文:
《初识JavaScript,Ajax,jQuery,并比较三者关系》
六、发布(牛腩视频第62集)
网站发布,着实费了我一番功夫,也请了师傅来帮忙,不过还好,终于成功了。其中有两篇博客在我发布网站的过程中起到了很大的作用。特此贴出来,分享给大家,写的很详细具体哦!
网站发布篇:《网站的发布和iis部署》;
网站排错篇:《网站发布图解》
刚看完视频的时候,就感觉自己只完成了一半的任务,学习成果没有颗粒归仓,没有总结,就不能称之为学习,所以着实花费了几天的时间总结了牛腩中出现的知识点,也许学习到的还远远不够,但是,收获是丰盛的,期待Web开发之旅。