一位初入门的新员工的代码分析(1)

公司刚来的新员工,刚毕业,经过几个月的实践,完成了一个实训编码练习。通过对其代码的阅读,发现了一些问题。这些问题对于初学者来说,是比较容易犯的错误,而且以他们目前的经验来说,不容易发现或理解。对此进行专门的解读和分享,希望各位初学者能够有所启发,早日提高编码水平。

任务比较简单,是完成一个学生管理系统,现在很多大学生都自己玩这样的系统。要求使用链表、XML等考核点。

以下是其写的学生链表类头文件:

#include "Student.h"
#include "XMLWrapper.h"
struct StudentNode
{
 CStudent m_Student;
 StudentNode *next;
};
class CStudentList
{
public:
CStudentList();
~CStudentList();
 //初始化学生链表
void InitializeStudentList(int nSize,CStudent *Student);
    void InitializeStudentList();
 //添加学生
 void AddStudent(CStudent Student);
//删除学生
void DeleteStudent(CString StudentID);
//清空学生链表
void ClearStudentList();
//通过学号查找学生
CStudent* SelectStudent(CString strStudentID);
//查找班级内的学生
BOOL  SelectCalssStudent(int *Count,CStudent **Student,CString strMajor,CString strGrade,CString strClass);
//保存学生信息
BOOL SaveStudentInfomation(TiXmlElement *RootElement,CString strXML,CXMLWrapper *pTinyXML);
//检查学生链表是否相等
BOOL CheckStudentList(CStudentList *pStudentList);
private:
StudentNode *m_head;
};

对于这个头文件定义,初学者可以从自己目前的经验来看看有什么优缺点。然后再看下面的分析,可能会更有价值一些。









好吧,下面分析一下从这个头文件中看到的不足。

1。变量命名风格不统一

CString StudentID    VS  CString strStudentID

CStudent *Student   VS  CStudent **Student

可读性差,读者难以通过变量名来容易辨识变量类型,很容易混淆

建议:实在不知道该怎么办的话,一是找个编码规范学一学,二是看看MFC吧。


2。变量名称无意义

StudentNode *m_head

m_head能代表什么?不能达到顾名思义的效果。

建议:最优秀的注释就是不用写注释。不用写是指代码本身就可以自解释。


3。函数名有单词错误

SelectCalssStudent

班级--Class

建议:实在不清楚的话,可以查查字典啊。


4。返回值类型不合理

void InitializeStudentList(int nSize,CStudent *Student);

void AddStudent(CStudent Student);

操作是否成功,如何让用户了解?

建议:业务功能性操作,尽量考虑保留返回值,是否成功对外部的处理有较大的影响。


5。参数个数太多

BOOL  SelectCalssStudent(int *Count,CStudent **Student,CString strMajor,CString strGrade,CString strClass);

未来班级属性增加怎么办?

建议:关系比较紧密地参数,且数量较多,有扩展可能性的,建议使用结构,可保持接口不变

           另外,常见的OUT型参数,一般放在函数参数的末尾

6。类的职责不明确

BOOL SaveStudentInfomation(TiXmlElement *RootElement,CString strXML,CXMLWrapper *pTinyXML);

学生列表类是否负责学生信息的读写,还只是作为一个学生对象的容器?两种方案似乎都只完成了部分功能,封装还不够。


如果仅作为容器,是抽象的,与业务无关;而读写,属业务范畴

如果负责读写,那么应该有信息的读取处理部分,而不是只有保存部分

扩展考虑,存储未来可能存在不同的存储方式,这里直接固化为XML文件格式存储,未来无法扩展。

如果只作为容器,那么文件存储类应该移除。为了支持外部遍历容器进行相关处理,类应该增加遍历机制,如Prev(),Next(),Head(),Tail()等

另外,作为容器类,似乎还应该有修改学生信息的函数

相关性:设计模式中,有单一职责原则;有迭代器模式

其它建议:可将节点中的学生对象定义为指针类型



版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-24 01:12:32

一位初入门的新员工的代码分析(1)的相关文章

一位初入门的新员工的代码分析(2)

前文分析了一个类的头文件定义.从头文件定义中可以看出类的一个大致功能,可以分析该类的设计是否合理.其它还可以观察到编码规范.函数参数.返回值等类型的合理性.在类的设计中,一定要充分明确类的职责,不是此类职责范围内的事,不要随意让这个类来处理,保持类的独立性,降低耦合度,这点非常的重要.很多新人对如何设计类很模糊,很多情况下,类设计不合理,这需要逐步的积累经验,提高自己. 今天对函数体进行分析,通过函数体的分析,找出问题,完善自己的代码. void CStudentList::Initialize

阿里感悟(十四)-如何带新员工(转)

引言 在阿里,每一位新员工进来之后都会有一位导师,导师一般都是团队中非常优秀的员工.有些部门可能不叫导师了,而是叫师兄,可能更亲切,但是我觉得导师更贴切. 导师指导新员工的过程,我觉得应该是一个PDCA的过程,即计划,执行,检查和总结. 第一.定计划 对于新员工一定要给帮主他们制定学习和工作计划,做到计划驱动学习,互联网开发要学的东西比较多,对于新员工生来说不知道该先学什么后学什么,学到什么程度.所以计划驱动比较重要,在工作和学习之前给新员工列一份详细的学习和工作计划,并询问下新员工这个计划有没

为什么企业宁愿开高工资给新员工,都不愿意给老员工加工资?

有朋友问到: 俺的建议: 先从这位被低薪压制的老员工角度说说: 决定你的薪资水平的根本原因是你的实力,而影响因素是你的性格.为什么说是你的性格呢?比方说你比较好欺负,不好意思和老板提要求,老板就会继续低薪用你,最多每年加你一点点.你作为老员工和老板谈工资,你的筹码比较弱,因为你需要保住这份工. 老板招聘新员工就不同了,老板需要这个岗位才去招聘的,有必要的话,他会出他能接受范围内的最高工资的. 所以从这位老员工的角度看来,自己就被欺负了,感觉自己实力比新员工还好,为啥我的待遇低? 当然这些都是自我

任正非对新员工的寄语——要承受,要集中精力并熟能生巧,要学习,要主动,要思考,要判断,要行动

总结一下,变成两句话: 第一封信:要群体奋斗,要求助,要奋斗,要贡献,要承受,要集中精力并熟能生巧,要循序渐进,要学习技术.管理技能.思维方法和工作方法,要服务,要主动,要诚信.第二封信:要自己去做,要思考,要判断,要行动,要主动建议和质疑. ------------------------------------------------------------------------------------- 任正非对新员工的寄语:烧不死的就是凤凰 注:这一篇简短却能足够阐述华为创始人任正非用

〔远大云商〕"新员工入职仪式"暨"寿星生日会"圆满举行!

[远大云商]"新员工入职仪式"暨"寿星生日会"圆满举行! 3月是一个特别的月份,在即将过去的3月,[远大云商]迎来了7位新同事,新鲜血液的融入,让团队力量不断壮大,远大势必越走越远.越来越辉煌.在今天,公司特别为这7位俊男靓女举办了隆重的"新员工入职仪式" .

正则表达式30分钟入门教程-新

本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它.一旦入门后,你可以从网上找到更多更详细的资料来继续学习. 别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并不像你想像中的那么困难.当然,如果你看完了这篇教程之后发现自己明白了 很多,却又几乎什么都记不得,那也是很正常的--其实我认为没接触过正则表达式的人在看完这篇教程后能把提到过的语法记住80%以上的可能性为零.这里只 是让你明白基本道理,以后你还需要多练习,多查

it新员工如何快速学习

沟通是学习的第一步: 我和一批新员工一起入职,我工作8年,其他5个新员工基本上工作年限在1~2年之间,经过了3天之后出现了截然不同给的2种情况 第一天项目组给我分配开发需求,其他5人在学习,主要是我的工作经验比较长,项目组认为我参与进来没有问题.          第二天我一边自学习一遍找周围同事沟通,其他5人在接受了一次半个小时的培训.                    在这天他们基本上都是一边看资料一边娱乐...          第三天我的一个功能模块出来了一半,其他5人的工程都没搭建

C++初入门

C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互.现在让我们简要地看一下什么是类.对象,方法.即时变量. 对象 - 对象具有状态和行为.例如:一只狗的状态 - 颜色.名称.品种,行为 - 摇动.叫唤.吃.对象是类的实例.最后,如果大家如果在自学遇到困难,想找一个C++的学习环境,可以加入我们的C++学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题.类 - 类可以定义为描述对象行为/状态的模板/蓝图. 方法 - 从基本上说,一个方法表示一种行为.一个类可以包含多

SpringBoot 初入门

SpringBoot 初入门 关于介绍什么之类的就不讲了,主要做一下学习记录. 1. 启动方式 IDEA 启动 命令行启动: mvn spring-boot:run 部署到服务器启动: 先进行打包, mvn clean package 移动到项目的 target 目录下,可以看到一个后缀名为 jar 的文件,便是刚刚我们打包的 jar 包, 使用命令行启动: java -jar target/luckymoney-0.0.1-SNAPSHOT.jar 传参方式启动: java -jar -Dsp