zoukankan      html  css  js  c++  java
  • 《代码整洁之道》阅读笔记04

    对象和数据结构

    对象:暴露行为(接口),隐藏数据(私有变量)

    数据结构:没有明显的行为(接口),暴露数据。如DTO(Data Transfer Objects)、Entity

    1.对象与数据结构的反对称性(参考书中代码清单6-5)

    • 使用数据结构便于在不改动现在数据结构的前提下添加新函数;使用对象便于在不改动既有函数的前提下添加新类。
    • 使用数据结构难以添加新数据结构,因为必须修改所有函数;使用对象难以添加新函数,因为必须修改所有类。
    • 万物皆对象只是个传说,有时候我们也会在简单数据结构上做一些过程式的操作。

    2.Demeter定律(最少知识原则)

    • 模块不应该了解它所操作对象的内部情形
    • class C的方法f只应该调用以下对象的方法:
    • C
    • 在方法f里创建的对象
    • 作为参数传递给方法f的对象
    • C持有的对象
    • 方法不应调用 由任何函数返回的对象 的方法。下面的代码违反了demeter定律: final String outputDir = ctxt.getOptions.getScratchDir.getAbsolutePath;
    • 一个简单例子是,人可以命令一条狗行走(walk),但是不应该直接指挥狗的腿行走,应该由狗去指挥控制它的腿如何行走。

    异常处理

    异常处理很重要,但如果异常处理四处分散在代码中 导致逻辑模糊不清,它就是错的。

    1.使用异常而不是返回错误码

    • 如果使用错误码,调用者必须在函数返回时立刻处理错误,但这很容易被我们忘记。
    • 错误码通常会导致嵌套if else

    2.先写try-catch语句

    • 当编写可能会抛异常的代码时,先写好try-catch再往里堆逻辑

    3.使用unchecked exception(java独有) 4.在catch里尽可能的记录错误信息,记录失败的操作以及失败的类型。 5.根据调用者的需要 定义不同的异常处理类

    • 同一个try里catch多个不同exception,但是catch处理的事(打日志等)是一致的,可以考虑用函数打包一下这个异常处理,针对不同异常仅需throw成同一个异常而不做任何处理,在外层catch时统一处理(打日志等)。如果仅想捕获一部分异常而放过其他异常,就使用不同的函数打包这个异常处理。

    6.特例模式: 创建一个类来处理特例。 try{

    MealExpendses expenses = expenseRepotDAO.getMeals(employee.getID);

    m_total += expenses.getTotal; // 如果消耗了餐食,计入总额

    } catch(MealExpensesNotFound e) {

    m_total += getMealPeDiem; // 如果没消耗,将员工补贴计入总额

    }

    异常打断了业务逻辑。可以在getMeals里不抛异常,而是在没消耗餐食的时候返回一个特殊的MealExpense对象(PerdiemMealExpense),复写getTotal方法。

    MealExpendses expenses = expenseRepotDAO.getMeals(employee.getID);

    m_total += expenses.getTotal;

    publc classPerDiemMealExpensesimplementsMealExpenses{

    publicintgetTotal{

    //return xxx; //返回员工补贴

    }

    }

    7.别返回null值

    • 返回null值只要一处没检查null,应用程序就会失败
    • 当想返回null值的时候,可以试试抛出异常,或者返回特例模式的对象。

    8.别传递null值

    • 在方法中传递null值是一种糟糕的做法,应该尽量避免。
    • 在方法里用if或assert过滤null值参数,但是还是会出现运行时错误,没有良好的办法对付调动者意外传入的null值,恰当的做法就是禁止传入null值。
  • 相关阅读:
    读写文件
    c++ 中的 -> :: : .
    CDH安装步骤
    MySQL安全配置向导mysql_secure_installation详解
    Linux下彻底卸载mysql详解
    安装mysql警告: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
    为Hadoop集群选择合适的硬件配置
    利用cm压缩包手动安装cm和cdh
    CM5.11与CDH5.11安装使用说明
    法的本体
  • 原文地址:https://www.cnblogs.com/zaixiachengxuyuan/p/14941520.html
Copyright © 2011-2022 走看看