前几个礼拜一直在学设计模式,而且通过把《大话设计模式》中用C#编写的例子用Python实现了,大大增加了我对面向对象编程的理解,同时也增加了我对Python编程的信心和兴趣。这个礼拜就把自己曾经编写的自动化产生Netconf配置文件的工具重构了一下,重构代码在我的github账号里。https://github.com/givemefiveagain/CNetconf
学习了设计模式的好处,在于能帮助我理清项目中所设计的对象之间的关系,以及如果圈定和设计类。
在这次重构过程中,我主要采用的设计模式有:在创建ElementTree时采用了工厂模式、创建者模式,在保存ElementTree时采用了collections.defaultdict用来保存父节点与子节点之间一对多的关系,在设计ElementTree时充分利用了封装和继承关系,让所有的子树得共性都放在父类中,避免了不必要的重复。
该工具名为CNetconf,这个工具的功能主要分为四大块:
- ParserXML模块--解析产品的MIB文件,从中提取表的外层的层次关系,以及表里面的参数
- ParserArgvs模块--解析入参。之前尝试使用python内置模块argparse,但是由于该工具的入参的可变性很大,不适合。
- BuilTree模块--构造输出Netconf XML的三大部分,最外层是start-session,close-session, 中间层是rpc-ManagedFunction,最里层是表moname-attrs
- BuildXML模块--介绍入参,并解析入参,调用BuildTree中的三个部分,构造出预期的完整的netconf xml文件
在重构过程中,我使用了以下两个工具:
- 采用Visual Paradigm工具画UML关系图。该CNetconf分为四大模块,以及每个模块内部的类之间的UML关系,每个类内部的属性和方法
- 采用PyCharm编程工具。该工具能创建项目,并实时编译,在线运行,很好用。就是快捷键还不太适应。
同时尝试利用setuptools对CNetconf的源代码进行打包,只能打包python源文件,我想把MIB文件也打包进行,尝试失败,以后需要改进的地方。
输出入下图所示
经过一周的努力,也算有些收获和输出,但还有以下几点需要提高的:
- 在进行代码编写前先画出UML图,设计好模块,模块里的类,类的属性与方法等
- 利用Pycharm进行编码,便于项目管理,同时利用Git进行代码管理
- 利用迭代的方法,重复迭代,尽早发包,这样能提高效率,避免不止境的优化
- 这个模块的设计是我从面向过程到面向对象编程的第一步,不够完美,还有很多需要改进的地方。
- 如何提高代码的效率,比如CPU,memory等,要经常自我提醒