如何编写优雅的代码?

 1.消除硬编码

  第一个就是它有硬编码的情况,什么是硬编码,什么是硬编码就是说在代码里面,你用的一些变量它是写死的,比如说我们刚才调用connect APId的时候它的,ip地址端口用户名和密码都是我们写死的,什么192.168.3.106,用户名,密码,如果它的对端的这个端口它变了,或者说是密码用户名一般不会变。它的密码改变我们是不是要去修改代码,如果在实际工作中这样是非常不方便的,而且是有一定风险的,修改代码就意味着它可能是bug产生的边缘。所以说我们最好把这个可配置的代码,和变量分离开来。就是说消除硬编码的一个办法就是让它可配置。

  2.异常捕捉

  其次就是异常的捕捉,我们可以看到刚开始我们想列了,那个设置hot key机制时候,它调用connect方法,就抛出来一个sshaexception这个异常,但是我们并没有对它进行处理。这样的话就会在 实际的工作中它就非常的不好,甚至是有一些风险,因为不捕获这个异常的话,可能你的代码,就没办法在执行下去了,然后你写了这个软件可能就当掉了实际生产环境下,是一个非常严重的问题。

  3.封装

  另外就是进行一下封装,我们看到Paramiko它是对这个,它其实就是对ssh协议的一个封装,然而我们在实际的使用Paramiko的过程中,可以针对自己项目的需要。对它进行二次封装,就是说我封装成我们大家,一起,团队的人它更方便的使用它,甚至它可以不知道Paramiko这个的存在,而调用你封装的接口。来进行一个更方便的操作。

  那我们就看实际的过程中我们是怎样来解决这几个问题的,首先就是消除硬编码的问题,我们引入另外一个ConfigParser这个库,ConfigParser就是可以把这个配置很方便的读进来。

  config = ConfigParser.ConfigParser()

  然后它有一个read的API就是读取文件。

  那现在我们就一起来建立一个文件,叫做config.ini

  [ssh]

  host=192.168.3.105

  port=22

  usr=allen

  pwd=123

  timeout=1.0

  然后我们read这个config.ini

  config.read(‘config.ini’)

  那么这些硬编码的地方,就可以换成对应的配置

  client.connect(hostname= config.get(‘ssh’,’host’), port= config.getint(‘ssh’,’ port’), username= config.get(‘ssh’,’ username’), password= config.get(‘ssh’,’ password’), timeout= config.getfloat(‘ssh’,’ timeout’))

  我们可以来运行看一下

  这样我们把这些变量给替换成用这个配置来解析出来它实际的值。我们就是用这个ConfigParser来完成的,现在它运行的是非常的好,然后我们就把这些实际的参数给用配置给它隐藏起来,如果将来我们配置一旦更改的时候我们只需要更改这个config.ini就可以,然后我们来看一下,如何进行异常的捕获。

  首先这个connect它会抛出这个异常的时候我们其实就应该用Python的try来捕获它,然后用这个except Exception,e:可以把异常给打印出来。

  try:

  self.client.connect(hostname=self.host, port=self.port, username=self.usr, password=self.pwd, timeout=self.timeout)

  return True

  except Exception,e:

  print e

  这个时候呢一旦开启的时候我们记得要把它给close掉。避免造成资源的浪费

  self.client.connect(hostname=self.host, port=self.port, username=self.usr, password=self.pwd, timeout=self.timeout)

  return True

  except Exception,e:

  print ‘caught ‘, e

  try:

  self.client.close()

  return False

  except:

  pass

  其实这样的话就把这个,简单的看一下异常的捕获,其实这个地方抛出捕获的时候我们就在这把它给捕获了,其实这个exec_command它也是会抛出异常。

  接下来我们就对它进行一个封装,如何封装,封装它是一个面向对象的一个特点,就会面向对象方法的一个特点,所以说我们把一些细节给隐藏起来,怎么隐藏呢,就是通过类。

  我们可以新建一个ParamikoClient这个类。

  class ParamikoClient:

  然后其实我们在它的初始化函数中就可以把config这个文件名给传进来。

  def __init__(self, ini_file):

  然后就可以进行一些初始化的工作,这个config要变成main自身的变量,这个Client也是变成它的一个成员,这个类的对象的一个成员。

  self. config= ConfigParser. ConfigParser ()

  self. Config. read(‘ config.ini ‘)

  self. Client= paramiko.SSHClient()

  self. Client= set_missing_host_key_policy(paramiko.AutoAddPolicy())

  然后我们还可以,定义它的connect方法,connect方法的时候就可以把这部分全部,拷贝过来。

  self.client.connect(hostname=self.host, port=self.port, username=self.usr, password=self.pwd, timeout=self.timeout)

  return True

  except Exception,e:

  print ‘caught ‘, e

  try:

  self.client.close()

  return False

  except:

  pass

  然后最终这样就可以最后我们在封装一个如何执行命令的

  def run_command(self, cmd_str):

  stdin, stdout, stderr = self.client.exec_command(cmd_str)

  for line in stdout:

  print line

  这样一个类我么我们就做好了我们在用这个类来建立一个ParamikoClient。

  client = ParamikoClient(‘config.ini‘)

  我们调用它的connect方法来接,

  client.connect()

  然后

  client.run_command(‘date‘)

  它把直接就把这个指令结果输出来了,我们还可以运行一下刚才输的查询远程机器的这个内存信息的指令。

  client = ParamikoClient(‘config.ini‘)

  client.connect()

  client.run_command(‘cat/proc/meminfo‘)

  我们这样就看到到了这个从它编码,到进行一个更优雅实现的这么一个过程。

  其实还有一个跟好的做法就是把这个ParamikoClient这个类单独放到一个文件里面,封装性会更好。

原文链接:http://www.maiziedu.com/wiki/frame/query/

时间: 2024-10-05 14:51:59

如何编写优雅的代码?的相关文章

[转]新兵训练营系列课程——编写优雅代码

原文:http://weibo.com/p/1001643877361430185536 课程大纲 什么是好代码 如何编写优雅的代码 如何做出优雅的设计 如何规划合理的架构 如何处理遗留代码 什么是好代码 对于代码质量的定义需要于从两个维度分析:主观的,被人类理解的部分:还有客观的,在计算机里运行的状况. 我把代码质量分为五个层次,依次为: 完成功能的代码 高性能的代码 易读的代码 可测试的代码 可扩展的代码 如何编写可读的代码 在很多跟代码质量有关的书里都强调了一个观点:程序首先是给人看的,其

如何优雅的代码编写 AutoLayout

概述 使用 Objective-C 纯代码编写 AutoLayout,看 AutoLayout 的字面理解就是自动布局,听起来好像蛮屌的样子.说白了就是适配:适应.兼容各种不同的情况,包括不同版本的操作系统的适配(系统适配)和不同屏幕尺寸的适配(屏幕适配).在 Storyboard 中,AutoLayout 有以下 3 个常用面板: Align(对齐) Align(对齐) Pin(相对) Pin(相对) Resolve Auto Layout Issues(约束处理) Resolve Auto

每周一书-编写高质量代码:改善C程序代码的125个建议

首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10余年开发经验的资深C语言专家全面从C语法和C11标准两大方面深入探讨编写高质量C代码的技巧.禁忌和实践 C语言因为既具有高级语言特性,又具有汇编语言特性,所以它是近二十几年来使用较为广泛.生命力较强的编程语言.无论是操作系统.嵌入式系统.普通应用软件,还是移动智能设备开发,它都能够很好地胜任,是公认的强大的语

如何编写无法维护的代码 让自己稳拿铁饭碗 ;-)

如何编写无法维护的代码 让自己稳拿铁饭碗 ;-) Roedy Green 简介 永远不要(把自己遇到的问题)归因于(他人的)恶意,这恰恰说明了(你自己的)无能.-- 拿破仑 为了造福大众,在Java编程领域创造就业机会,兄弟我在此传授大师们的秘籍.这些大师写的代码极其难以维护,后继者就是想对它做最简单的修改都需要花上数年时间.而且,如果你能对照秘籍潜心修炼,你甚至可以给自己弄个铁饭碗,因为除了你之外,没人能维护你写的代码.再而且,如果你能练就秘籍中的 全部 招式,那么连你自己都无法维护你的代码了

如何编写无法维护的代码

如何编写无法维护的代码 让自己稳拿铁饭碗 ;-) Roedy Green 简介 永远不要(把自己遇到的问题)归因于(他人的)恶意,这恰恰说明了(你自己的)无能.-- 拿破仑 为了造福大众,在Java编程领域创造就业机会,兄弟我在此传授大师们的秘籍.这些大师写的代码极其难以维护,后继者就是想对它做最简单的修改都需要花上数年时间.而且,如果你能对照秘籍潜心修炼,你甚至可以给自己弄个铁饭碗,因为除了你之外,没人能维护你写的代码.再而且,如果你能练就秘籍中的 全部 招式,那么连你自己都无法维护你的代码了

编写高质量代码改善C#程序的157个建议——建议101:使用扩展方法,向现有类型“添加”方法

建议101:使用扩展方法,向现有类型“添加”方法 考虑如何让一个sealed类型具备新的行为.以往我们会创建一个包装器类,然后为其添加方法,而这看上去一点儿也不优雅.我们也许会考虑修改设计,直接修改sealed类型,然后为其发布一个新的版本,但这依赖于你拥有全部的源码.更多的时候,我们会采取针对第三方公司提供的API进行编程的方式.对于我们来说,FCL是一组第三方公司(微软)提供给我们的最好的API. 包装类的编码形式如下: class Program { static void Main(st

爱创课堂推荐6个编写优质干净代码的技巧,开发者必看!

划重点 作为一名开发者,编写一手干净的代码很重要,所以在本文中作者先列举出编写干净代码的一些好处,再提出6个技巧用于编写干净代码,供开发者进行参考学习. 编写干净的代码并不是一件容易的事情,这需要尝试不同的技巧和实践.问题是,在这个问题上有太多的实践和技巧,因此开发人员很难进行选择,所以要把这个问题简化一下.在本文中,将首先讨论编写干净代码的一些好处,然后将讨论6个技巧或者实践,用于编写最常用的干净代码. 以下是本文重点: 编写干净代码的好处 1. 更容易开始和继续一个项目 2.有利于团队新员工

Python :编写条件分支代码的技巧

『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目. 在雕琢代码的过程中,有大工程:比如应该用什么架构.哪种设计模式.也有更多的小细节,比如何时使用异常(Exceptions).或怎么给变量起名.那些真正优秀的代码,正是由无数优秀的细节造就的. 序言 编写条件分支代码是编码过程中不可或缺的一部分. 如果用道路来做比喻,现实世界中的代码从来都不是一条笔直的高速公路,而更像是由无数个岔路口组成的某个市区地图.我们编码者就像

代码质量优先——《编写高质量代码:改善c程序代码的125个建议》

高质量的代码不但可以促进团队合作.减少bug处理.降低维护成本,对程序员自身的成长也是至关重要的.很难想象一个参考<如何编写无法维护的代码>写代码的程序员技术成长的上限有多么低.为了写出高质量的代码,我们需要听取过来人的改善代码质量的经验,<编写高质量代码:改善c程序代码的125个建议>就是一本能让人写出高质量代码的好书. 本书的第三章<程序控制语句应该保持简洁高效>首先用简练的语言介绍了流程控制结构的概念,然后提供了对if.else.for.do-while.swit