2.2 简单的重构

将上一小节的判断语句全都写到search函数中的几个缺点: 1.使得代码非常的臃肿,现在只有两个判断就占用了6行,如果有多个判断,search方法就要爆炸了 2.如果有其他地方的代码也要进行这个判断,那么就需要再重新写一遍,同样的代码重现在了两个地方 3.代码可读性查,作为一个路由函数,代码阅读者很难一眼看出路由函数的主要功能。

重构后的代码 fisher.py

@app.route("/search/<q>/<page>")
def search(q, page):
    """
    搜索书籍路由
    :param q: 关键字 OR isbn
    :param page: 页码
    """
    isbn_or_key = is_isbn_or_key(q)

helper.py

def is_isbn_or_key(word):
    """
        判断word是isbn号还是查询关键字key
        isbn isbn13 由13个0-9在数字组成
        isbn10 由10表0-9表数字组组成,中间可能包含' - '
    :param word:
    :return: key or isbn
    """
    isbn_or_key = 'key'
    if len(word) == 13 and word.isdigit():
        isbn_or_key = 'isbn'
    short_word = word.replace('-', '')
    if '-' in word and len(short_word) == 10 and short_word.isdigit():
        isbn_or_key = 'isbn'
    return isbn_or_key

知识点:

  • 其他地方的代码多一点还可以接受,视图函数中不可以,因为视图函数是一个web项目的入口。所有人阅读都是从这里入手,应该把细节屏蔽掉,给阅读者一个选择。

  • 看源码的技巧:先通读整体,了解整体过程,再回过头来了解细节,不要从一开始就深究每一个细节

  • 过多的注释会让代码变的臃肿,尽量使用易懂的函数名来代替注释,保持代码的简洁性

Last updated