0%

项目结构设计(第二版)

2017年7月3日 下午4:55

这篇文章的思路是:
1. 文章产生的原因
2. 我总结出来的“框架”
3. 对框架的说明
1. 其中有哪些注意点
2. 原因
3. 如何解决
4. 例子

第二版改进:

1. 加了一个原则:


2. 封装加了一个

3. 包的设计

项目难度分类
1. 数据库设计:我做过的就是报表系统,要将表设计成数据库形式,设计难,设计出来一般性能也很差!
2. 逻辑:项目中涉及到算法,一般的项目中没有
3. 业务流:这的难点是你需要了解一个行业的运行流程,而且要人打交道
4. 扩展性:你的老板老改需求,这扩展性我就得就是个梦!
5. 性能:I don’t care and I have no idea.
6. 总结:核心还是在于与业务流的熟悉和了解

这篇文章产生于这样一个问题:设计一个系统,我们应该如何设计?

于是我断断续续的想了两天,想出一个所谓的我的设计框架(这个名字我也是醉了,估计是神盾局特工看多了)

框架:其实就是能解决某功能的方法有哪些


注:这个框架会随着经验不断更新

说明

1.     我总结出来的最终方法很笨:**根据功能一个个的照着框架,从上向下试。**
    1. e.g.:一个图书管理系统的超时扣费功能,他不是一个属性、一个表,就可以完全解决的,所以就需要代码逻辑来解决,而这样的功能我们要如何封装,他和其他类之间的关系是如何才是设计的重点
2.  设计时有两个原则:也是容易犯的错误
    1. **不是框架中的所有元素都要在一个系统中使用**
        1. 不是所有的系统都要使用数据库:数据库只是只是只是一个数据存储的地方而已。比如说你用java设计一个权限系统,就必须用数据库吗?当然不是,权限系统的核心是分配权限的方式,只有需要保存数据时,才需要。权限系统其实可以先设计出来结构,编码实现,然后再去往上加数据库功能,这样也是可以的。
    2. **以功能为导向**也就是需求,**业务流的重要性**
        1. 我们要拿上一个具体的功能,去想他如何去实现,而不是上来画数据库ER图,类图。
        2. 首先要确定的就是功能,一点一点的列出来,然后在思考
        3. 每个功能想的差不多,最后在要将功能进行合并
    3. **只有知道了具体的每一部分,我们才能去动手**
        1. **这里会用到大约1/3的时间**
        2. 否则一定会返工
        3. 这里包括:
            1. 数据库的ER图
            2. 类图
            3. 包有哪些,他们的作用有啥
            4. 使用了哪些设计模式,为什么要使用
            5. 等....
        4. 在这个阶段容易的就是少考虑了某些情况,想到之后你又不知道怎样往里面插
3. 具体去讲解每一部分:
    1.  **数据库**:是为了保存数据,如果不保存也可以实现相同的功能,要他还干啥
        1. 我曾经做项目的时候为了彰显一下我数据库的不错,逻辑就不在代码中写了,而是直接写在了数据库中,但是到了后来,我发现很多写的数据库中并不合适,首当其冲的就是改起来太麻烦了。
        2. 但是有些功能,如一些自动的时间处理,你需要系统在规定的时间完成特点的功能,这时候在数据库去完成就比较合适了。
        3. 还有一个例子是:我见过有人(逗比石)的sql竟然运行起来是按分钟算,我也是醉了,我就得如果要放在数据库中解决的话,可以让数据库在特定的时间,来自动处理这些数据,放到一个表中,然后用的时候我们就之间查新表就行,不用从头开始再查了
    2. **封装**:封装的目的为了让程序有段落感,可以从宽泛到具体来设计系统,尤其是一些大的系统,写的写的就忘了前面的写的啥了,但是如果封装到位,
        1. **项目做起来就是一个功能一个功能的稳步推进,自己心中也有数**。
        2. **设计时就像一个一个个黑盒一样的感觉**。    
        3. 注意当前功能(方法)归属于那个类
            1. e.g.:现实中book是没有结账功能的,而是结账的对象是book
            2. 但是,在编程中实现在book类中,确实是更加方便。
        4. **封装过程中犯过的毛病**:
            1. 测试类中方法不能太多
                1. 解决方法:可以想象这个函数代表的功能是谁的
            2. 测试类中主方法太长
                1. 用c写的习惯了,100行以内根本不认为多
                2. 而java中面向对象,**超过二十行**就觉得有点多了
            3. 构造函数顺序:
                1. 无参构造
                2. 主键构造
                3. 带所有参数的构造
            4. **注释注释注释注释**
        5.  对于框架而言我说几句废话,我是做一开始学的是php,php可以脱离框架完成的,但是我后面学了框架之后,让我想到了学长的话“框架就把人学废了”,框架做项目的确快很多,快到了即使一个人没学过php语法,我觉得给他一个星期去学框架这里指ThinkPHP,我就得也可以做出一个不错的门户网站。**学习阶段千万别依靠框架,废了你**。
    3.  **设计模式**:
        1. 目的一是**为了实现一些特定的功能**,必须使用某种模式才可以实现
            1. 根据**每种设计模式解决的问题来选择**,请看前面~设计模式~那篇文章
        2. 目的二是**为了程序员自己编码方便**
            1. 比如说工厂模式,不用它也可以,但是用了更方便
        3. 面向对象的那几个特性,我把他们包括在设计模式中

包的补充:


一个android的项目目录

老师推荐的java项目目录

注:关于包的设计可以参考文章看 第三方开源组件的技巧