zoukankan      html  css  js  c++  java
  • 取长补短——结对编程项目之队友代码分析

    “三人行,必有吾师焉,择其善者而从之,其不善者而改之”——同样的需求,同样的项目,对照自己代码分析队友的代码个人觉得真的是一个很好的学习方法。小到如注释,命名规则一些惯用法,大到整个工程的编码思路甚至整个软件架构,对方好的方面积极吸取,坏的方面则尽量避免(对我这种菜鸡还是主要是前一方面 --__-- )另外结合本学期选的软件架构课程,在优缺点分析上我将分为软件架构(整个工程模式风格)和具体实现(实现思路和细节)两大块。

    一,优点:

    1.软件架构层面(模式风格层面):

    1)队友的工程是很典型的管道-过滤器风格——她把整个工程,需求化为了许多可以重用的小函数,数据粒度非常高,不同过滤器即函数间只由传递参数建立联系,使得她的代码有很强的可维护性与可拓展性,而且代码有问题时很容易调试,可以快速锁定问题函数,举个小栗子:

    类似老师PPT的栗子她将我建立文件夹及txt文件的大函数分为了获取当前路径,建立文件夹,建立文件三个很小的函数,这样做对于任意一个小功能以后如果想要调用就可以直接调用了。这一点感觉比起各种实现上细节上的收获更大,培养一个好的编程风格模式努力提高代码复用性与可拓展性还是很重要滴!

    2)其次她将账户,用户名存储在一个文件内类似一个小型数据库来实现可以便捷增改删用户登录信息,虽然对于目前较小系统来说每次登陆均需要访问文件对比信息增加了I/O的时间,但更具拓展性,对于数据量更大的大系统来说比采用结构体,二维字符串数组的方式显然科学多了。

    2.具体实现层面(实现思路及细节):

    1)她的代码功能设计上更加人性化,更方便,通过在主程序中登陆后循环调用选择题目数量,切换难度,出题,查重实现了无需退出系统重新登录即可多次打印题目并且可以随时切换难度与数量。

    2)她的代码思路更严密更科学,在输出前括号后先限制输出运算符,数字后才能再输出后括号,这样就避免了(0)这样没意义的括号操作。

    3)  备注严谨认真,让人读代码很容易理解。整个工程每个函数前全用一致的格式备注,交代清功能,参数。

    3)她在实现开根号时很严谨就是采用了“√”,不像我那么懒不会怎么输出根号也没查直接用的^0.5.(--__--)

    二,缺点

     1.软件架构层面(模式风格层面):

     管道-过滤器风格的数据粒度控制这种东西的确有点难控制,代码中感觉有些地方过高的数据粒度反而变为了缺点,一些很简单而且复用度较低的功能其实可以合并

    比如上图单独把小学,初高中出题函数拆分为产生各自产生数字,符号以及总出题函数七个函数反而使代码复杂度略微增加,代码过多。

    2.具体实现层面(实现思路及细节):

    1)代码思路可以进一步精简下,600多行代码量有点过多。

    2)对于每个老师的文件夹不能自动生成,只能手动创建对于增加或删除老师等操作时有些不方便。

    3)在输入题目数量时如果一不小心输入非数字字符会陷入无限循环,所以建议系统输入最好全部采用string类型,防止因用户输入不规范导致整个系统宕机。

    4)站在当前小型系统视角,采用每次登陆校验密码均需读取文件的方式会增加I/O的成本,降低速度(当然就像上面说的对于大型系统这则是一个优点)。

    最后的最后,膜下大佬,感觉这次互评代码收获颇多

  • 相关阅读:
    A*算法实现 八数码问题
    poj 1077 Eight(bfs,dbfs, A*)
    poj 1729 Jack and Jill (搜索,bfs)
    poj 4105 拯救公主(bfs)
    poj4091The Closest M Points(KD-tree)
    资源整理
    推荐 VS2010入门教程—鸡啄米
    Cstring的使用
    VC 中TEXT、_T、L的区别
    电脑内存和CPU的关系
  • 原文地址:https://www.cnblogs.com/xia-hao/p/9710709.html
Copyright © 2011-2022 走看看