`
zhang_xzhi_xjtu
  • 浏览: 536927 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

实践中的重构01_一段代码的细调

阅读更多
重构的概念已经为广大的程序员所熟悉。但是还是有很多细节可以注意。
    public static String getHiddenEmail(String email, int prefix, int suffix) {
        // 仅对包含@的email账户进行处理
        if (StringUtil.isBlank(email) || !StringUtil.contains(email, "@")) {
            return email;
        }

        int length = email.length();

        if (length < DEFAULT_TOTAL) {
            return email;
        }
        // @所在位置
        int splitPos = StringUtil.lastIndexOf(email, '@');
        // @前的字符段
        String preEmail = StringUtil.substring(email, 0, splitPos);
        if (StringUtil.isBlank(preEmail)) {
            return email;
        }
        // @后的字符段,包含@
        String latEmail = StringUtil.substring(email, splitPos, length);
        if (StringUtil.isBlank(latEmail)) {
            return email;
        }
        if (preEmail.length() > 17)
            preEmail = StringUtil.abbreviate(preEmail, prefix);

        if (latEmail.length() > 13)
            latEmail = StringUtil.abbreviate(latEmail, suffix);

        return preEmail.concat(latEmail);
    }

以上的code在我看来,有以下几个缺点。
1 方法名和实际的方法体不匹配。
2 魔数
3 if (StringUtil.isBlank(latEmail)) 永远返回false,因为当程序执行到这里,latEmail至少包括一个字符@。
4 方法中的代码的内聚性不够。主要是对preEmail和latEmail的处理分开了。
5 拼写错误,应该为lastEmail而误拼为latEmail

清洗代码后如下
private static String getAbbreviatedEmail(String email, int prefix, int suffix) {

        if (StringUtil.isBlank(email)) {
            return email;
        }

        if (email.length() <= DEFAULT_TOTAL) {
            return email;
        }

        // @所在位置
        int splitPos = StringUtil.lastIndexOf(email, '@');
        if (splitPos == -1 || splitPos == 0|| splitPos == email.length() - 1) {
            return email;
        }

        // @前的字符段
        String preEmail = StringUtil.substring(email, 0, splitPos);
        if (preEmail.length() > DEFAULT_PREFIX_LENGTH) {
            preEmail = StringUtil.abbreviate(preEmail, prefix);
        }

        // @后的字符段,包含@
        String lastEmail = StringUtil.substring(email, splitPos, email.length());
        if (lastEmail.length() > DEFAULT_SUFFIX_LENGTH) {
            lastEmail = StringUtil.abbreviate(lastEmail , suffix);
        }

        return preEmail+lastEmail ;
    }


其实我个人最喜欢的风格是简单的方法的guard condition不用大括号{},这样代码变为

private static String getAbbreviatedEmail(String email, int prefix, int suffix) {

        if (StringUtil.isBlank(email)) 
            return email;

        if (email.length() <= DEFAULT_TOTAL) 
            return email;

        // @所在位置
        int splitPos = StringUtil.lastIndexOf(email, '@');
        if (splitPos == -1 || splitPos == 0|| splitPos == email.length() - 1) 
            return email;

        // @前的字符段
        String preEmail = StringUtil.substring(email, 0, splitPos);
        if (preEmail.length() > DEFAULT_PREFIX_LENGTH) {
            preEmail = StringUtil.abbreviate(preEmail, prefix);
        }

        // @后的字符段,包含@
        String lastEmail = StringUtil.substring(email, splitPos, email.length());
        if (lastEmail.length() > DEFAULT_SUFFIX_LENGTH) {
            lastEmail = StringUtil.abbreviate(lastEmail , suffix);
        }

        return preEmail+lastEmail ;
    }


谢谢论坛上朋友的讨论,preEmail+latEmail这个地方用+号比用concat方法好。
分享到:
评论
1 楼 asialee 2010-08-02  
感谢lz,我最近也在重构那本书,感觉还是在日常生活中多积累比较好。

相关推荐

    重构_改善既有代码的设计 Java

    《重构:改善既有代码的设计》是一本在IT领域广受推崇的经典著作,专注于软件开发中的重构实践,尤其针对Java编程语言。重构是软件开发过程中的一个重要环节,它旨在提升代码的可读性、可维护性和整体质量,而不会...

    重构_改善既有代码的设计

    《重构:改善既有代码的设计》这本书为软件工程师提供了一套系统的方法论,帮助他们在实践中有效地改善既有代码的质量。通过对代码进行持续不断的优化,不仅能够提高软件产品的整体质量,还能提升开发团队的工作效率...

    重构_改善既有代码的设计.pdf

    这是一种常见的重构技巧,涉及将一段代码提取到一个单独的方法中,并替换原始代码中的相应部分。这种方法可以提高代码的可读性和可维护性。 **移动功能(Move Function)**: 当某个类中的某些功能更适合另一个类时...

    重构_改善既有代码的设计高清版.pdf

    2. **提取方法**:将一段代码封装成一个独立的方法,使其更易于复用和测试。 3. **内联方法**:如果一个方法仅在一处调用,并且其功能可以很容易地融入调用者,则可以考虑将其内联。 4. **移动功能**:将一个方法或...

    重构-改善既有代码的设计

    重构是软件开发过程中一个至关重要的环节,它旨在不改变代码外在行为的前提下,改进代码结构,使之更易理解和修改。此书深入浅出地介绍了重构的概念、原则和实践方法,对于任何Java开发者来说,都是提升编码技艺的...

    重构_改善既有代码的设计.zip

    《重构:改善既有代码的设计》是一本在IT行业中极具影响力的著作,由马丁·福勒(Martin Fowler)撰写。这本书深入探讨了重构这一编程实践,旨在提高软件的质量、可读性和可维护性,同时保持现有功能的稳定。通过一...

    重构pdf_chonggou

    首先,提取函数是一种常见的重构手法,它将一段复杂的代码块封装成独立的函数,使代码更易于理解和测试。这样做可以使代码逻辑更清晰,同时也便于复用和修改。 其次,提取类是为了更好地实现面向对象编程,将一组...

    重构改善既有代码的设计PPT课件

    通过重构,设计人员可以避免过度设计,只需先找到合理解决方案,后续实践中再根据实际情况优化。 识别代码的“坏味道”是重构的重要步骤。例如,重复代码是常见的问题,可以通过提炼函数或应用设计模式如Template ...

Global site tag (gtag.js) - Google Analytics