zoukankan      html  css  js  c++  java
  • 菜鸟也能飞:SQL数据库实战专业教程(三)

       六、概要设计。

      

       数据库分析完了,基础已经搞定,接下来就是对程序的初步设计。如何设计呢?如果是小程序,用脑子想想,也就算设计完了,但是如果是稍微复杂点的系统,恐怕就不行了。概要设计还是要借助于UML图,现在你知道它有多重要了吧?我们先来设计程序的大致结构,可以用UML的包图。作为专业水准的菜鸟,我们要用三层架构来设计程序。所谓三层架构,就是把程序分为基本的三层,分别为:UI层(用户界面层)、BLL层(业务逻辑层)、DAL层(数据访问层)。把程序分成三层,好处不言而喻,从此你就再也见不到所有东西都在一个窗体里混乱的情形,如果什么地方需要修改,再也不用去改动整个工程。每一层都有各自的功能,从UI层到DAL层,它们是向下依赖的。其中,UI层只负责显示界面,不应该有逻辑(有效性验证的逻辑还是可以有的),所有的功能都是通过调用BLL层完成;BLL层负责程序的所有逻辑组织,它通过调用DAL层完成复杂的操作,然后提供一个简洁的接口让UI层调用,相当于一个大外观层,BLL层的类,可以按照窗体写,也就是说每一个窗体对应一个BLL层的类,类的各种方法完成窗体的所有功能;DAL层负责访问数据库,数据库中每一个表,在DAL层中都有一个与之对应的操作类,通过该操作类,可以实现对对应表的一切操作。前边提到的实体类,就是为三层架构服务的,三层之间一般都是通过实体类传递数据,这样简洁、方便,实体类就相当于一个容器。注意,还有一个层,也可以不单独作为一个层的DBHelper,这个部分负责最低级的与数据库交互代码,比如连接数据库、插入数据、查询数据等等,把这些最基本的代码提炼到一个单独的层中有利于代码的复用,使程序更加精炼。欲知其他知识,请轻点google,我说到此为止。献上一张三层架构的示意图:

     


     

       再来一个数据库、DAL操作类、实体类的关系,这个有点乱,刚开始不好理解,多想想就知道啦:

     


     

       有了上边的分析,我们就可以用Rational Rose画程序包图了,提一个小技巧,Rose的包理论上应该在包图里画,但是那样没法画类,所以还是建议在类图里画包,用包把类图分成几个大部分,然后在每个部分里画特定的类,这样双击包直接就可以看到该包中的类了。根据三层架构,我们可以画出下边的包图:

     


     

       整体架构就是这样了,接下来就搞定每个包里都有什么类。

      

      SQLHelper包:

     

      DAL包:

     

      BLL包:

     

       UI包:

     

     

       七、详细设计。

     

       详细设计还得从数据库开始。作为专业菜鸟,我们要把所有的SQL语句都放在存储过程当中,不要放在程序里。这样做的好处是:容易修改、维护,执行速度快、减少数据传输量。存储过程可以简单的理解为在SQL服务器上创建小函数,它们有名字、参数,通过调用这些小函数,我们可以完成对表的增、删、查、改操作,相当于把SQL语句放在了服务器上,并且是经过编译的,执行速度快。在程序中,我们不必再写复杂的SQL语句,直接写存储过程名称就可以了。

       具体如何使用存储过程,可以参考这篇博文:http://blog.csdn.net/yangyuankp/article/details/7057922

       一定要仔细研究上边那篇文章,因为这是数据库使用的经典例子,把他搞懂了使用数据就没什么问题了,我就偷个懒,不在重复写啦。

       如果遇到一些问题,或许这篇文章会帮你:http://blog.csdn.net/yangyuankp/article/details/7208413

       另外,可以看出,本教程的例子,班级表依赖年级表,学生表依赖班级表,所以在删除记录时,必须级联删除,级联删除可以在程序中完成,但我还是比较喜欢放在SQL触发器中。触发器的使用方法和存储过程大同小异,在这就不赘述了,可以google。

       详细设计还是要用到UML图,这回用的一般是时序图和流程图,其他的虽然重要,但是比较少用,具体的还是google。

       很遗憾的告诉大家,教程到此就结束了,细节上远远没有结束,存储过程具体代码、各层的代码都没有写,UML的图还有很多没画,但那些都是细节知识,本教程的目的是宏观指导,本小菜也需要继续学习,时间非常有限,所以只能写这么多了。

       剩下的基本上都是写代码,我写出来也没啥意思,开发一个项目,基本的流程都在这呢,我主要不是教大家写代码,而不是告诉大家一个项目的流程,体会一个稍微大点的程序是怎么设计出来的,分享一下我自己的经验。跟着这个教程走,就是再菜,也是专业菜鸟!

       教程中涉及大量知识点,都需要大家耐心的去查阅资料,不怕不会,就怕不知道,刚开始会用就可以了,随着学习的深入,再去搞懂细节原理。我学这些东西也不是一天两天就学成的,是大约一年半的积累,希望大家能静下心来,踏实学习。

       最后,恭祝大家都能成为IT界的精英!

     

    附:

    SQL语句大全大全(经典珍藏版)+数据库—创建、建表、查询语句

  • 相关阅读:
    js父窗体关闭,子窗体紧随
    jquery validate 详细说明
    MyEclipse使用汇总——MyEclipse10设备SVN插入
    与策略模式工厂工作方式之间的差
    我必须发展2048配置界面设计
    Openstack部署总结:“部署过程Error: Local ip for ovs agent must be set when tunneling is enabled”问题
    国家模式c++
    Python 产生两个方法将不被所述多个随机数的特定范围内反复
    [React] Normalize Events with Reacts Synthetic Event System
    [NPM] Pipe data from one npm script to another
  • 原文地址:https://www.cnblogs.com/iyangyuan/p/2801839.html
Copyright © 2011-2022 走看看