成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

由「抽象一致性」思考如何書寫可讀性代碼

xiaodao / 1444人閱讀

摘要:結(jié)論二從不同的角度去看抽象一致性得出的結(jié)論是不一樣的只有最符合現(xiàn)有業(yè)務(wù)的沒有最正確的說明三對(duì)于實(shí)現(xiàn)一方法是查詢用戶的消費(fèi)信息而這里的詳細(xì)計(jì)算訂單金額直接寫在這個(gè)方法里面抽象層次十分混亂所以實(shí)現(xiàn)一是不推薦的。

場景

用戶實(shí)體User

通過用戶Id查找用戶的訂單信息接口List orders = orderService.queryOrders(long userId)

通過用戶Id查找用戶退款訂單Id列表List orderIds = orderRefundService.queryRefundOrderIds(long userId)

查找所有用戶的信息List users = UserService.queryAllUsers()

要求查詢用戶訂單消費(fèi)總金額(除去退過款的訂單)

實(shí)現(xiàn) 實(shí)現(xiàn)一
public List queryUserStatistics(){
    List users = UserService.queryAllUsers()
    for (User user : users) {
        long userId = user.getAccountId();
        List orders = orderService.queryOrderInfo();
        BigDecimal totlePayAmount = filterRefundOrderAndCalculateAmount(orders,accountId);
        user.setSumPayAmount(totlePayAmount);
    }
}
private BigDecimal filterRefundOrderAndCalculateAmount(List orders, long     userId) {
    List orderIds = orderRefundService.queryRefundOrderIds(userId);
    BigDecimal totlePayAmount = BigDecimal.ZERO;
    for (Order order : orders) {
        if (!orderIds.contains(order.getOrderId())) {
            totlePayAmount = totlePayAmount.add(order.getPayAmount());
        }
    }
    return totlePayAmount;
}

實(shí)現(xiàn)二
public List queryUserStatistics(){
    List users = UserService.queryAllUsers()
    for(User user : users){
         BigDecimal sumPayAmount = calculateTotleConsumeAmount(user);
         user.setSumPayAmount(sumPayAmount);
    }
}
private BigDecimal calculateTotleConsumeAmount(User user) {
    long userId = user.getUserId();
    List orders = orderService.queryOrderInfo(userId);
    return filterRefundOrderAndCalculateAmount(orders, userId);
}

private BigDecimal filterRefundOrderAndCalculateAmount(List orders, long     userId) {
    List orderIds = orderRefundService.queryRefundOrderIds(userId);
    BigDecimal totlePayAmount = BigDecimal.ZERO;
    for (Order order : orders) {
        if (!orderIds.contains(order.getOrderId())) {
            totlePayAmount = totlePayAmount.add(order.getPayAmount());
        }
    }
    return totlePayAmount;
}
實(shí)現(xiàn)三
public List queryUserStatistics(){
    List users = UserService.queryAllUsers()
    for(User user : users){
         BigDecimal sumPayAmount = calculateTotleConsumeAmount(user);
         user.setSumPayAmount(sumPayAmount);
    }
}
private BigDecimal calculateTotleConsumeAmount(User user) {
    long userId = user.getUserId();
    List orders = orderService.queryOrderInfo(userId);
    List orderIds = orderRefundService.queryRefundOrderIds(long userId);
    return filterRefundOrderAndCalculateAmount(orderPayAmountVOs, orderIds);
}

private BigDecimal filterRefundOrderAndCalculateAmount(List orders,List         orderIds) {
    BigDecimal is = BigDecimal.ZERO;
    for (Order order : orders) {
        if (!orderIds.contains(order.getOrderId())) {
            totlePayAmount = totlePayAmount.add(order.getPayAmount());
        }
    }
    return totlePayAmount;
}
實(shí)現(xiàn)結(jié)論

實(shí)現(xiàn)一:接到一個(gè)需求,完成工作,未仔細(xì)推敲代碼的合理性

實(shí)現(xiàn)二:接到另外一個(gè)需求,需要復(fù)用實(shí)現(xiàn)一的部分代碼,所以重新組織了下代碼

實(shí)現(xiàn)三:仔細(xì)看了下實(shí)現(xiàn)二,覺得很別扭,深層次的思考了下代碼的結(jié)構(gòu),發(fā)現(xiàn)實(shí)現(xiàn)二并沒有滿足現(xiàn)在已知需求的「抽象一致性」

說明 說明一

對(duì)于實(shí)現(xiàn)二queryUserStatistics()的抽象層次,我們可以這樣定義:

查找用戶的訂單消費(fèi)總額和用戶信息

查找用戶信息

計(jì)算訂單消費(fèi)金額

計(jì)算訂單消費(fèi)金額

查找所有的訂單信息

查找退款信息

過濾退款信息,計(jì)算消費(fèi)金額

查找所有的訂單

過濾退款訂單

計(jì)算消費(fèi)金額

過濾退款訂單

查找退款訂單

過濾

結(jié)論一:實(shí)現(xiàn)二在已知的需求里面其實(shí)是不是非常滿足「抽象一致性的」
結(jié)論二:仔細(xì)推敲下實(shí)現(xiàn)三,其實(shí)這個(gè)方法中filterRefundOrderAndCalculateAmount還是不是非常滿足「抽象一致性」的要求的。

說明二

從另外一個(gè)角度來看實(shí)現(xiàn)二

計(jì)算訂單消費(fèi)金額

查找所有的訂單信息

過濾退款并計(jì)算消費(fèi)金額

過濾退款并計(jì)算消費(fèi)金額

查找退款信息

過濾退款信息

計(jì)算消費(fèi)金額

結(jié)論一:如果這樣子理解,也是可以說實(shí)現(xiàn)二也滿足「抽象一致性」。
結(jié)論二:從不同的角度去看「抽象一致性」得出的結(jié)論是不一樣的,只有最符合現(xiàn)有業(yè)務(wù)的,沒有最正確的

說明三

對(duì)于實(shí)現(xiàn)一queryUserStatistics方法是查詢用戶的消費(fèi)信息,而這里的詳細(xì)計(jì)算訂單金額直接寫在這個(gè)方法里面,抽象層次十分混亂,所以實(shí)現(xiàn)一是不推薦的。

總結(jié)

在編寫代碼的時(shí)候,盡量讓方法或者類保持「抽象一致性」,這里說盡量的意思就是說明在很多時(shí)間可以違反這個(gè)約定(因?yàn)橛械臅r(shí)候會(huì)覺得很沒有必要,保持抽象一致性,就代表著你的方法里面可能需要很多私有方法,并且在極端情況下私有方法里面的代碼數(shù)很少)

「抽象一致性」從不同的角度看,可能會(huì)有不同的結(jié)果,所以盡量選一個(gè)更加符合當(dāng)前業(yè)務(wù)的角度(比如說實(shí)現(xiàn)一和實(shí)現(xiàn)二)
PS:關(guān)于抽象一致性更加詳細(xì)的描述,可以翻看我以前的提問對(duì)抽象層次一致性的看法

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65374.html

相關(guān)文章

  • 我的第一次移動(dòng)端頁面制作 — 總結(jié)與思考

    摘要:最近被分配到移動(dòng)端開發(fā)組,支持某活動(dòng)的頁面頁面制作。這算是我第一次真正接觸移動(dòng)端頁面制作,下面就談?wù)剛€(gè)人總結(jié)和思考。這無疑會(huì)增強(qiáng)程序的可維護(hù)性。規(guī)范正如上面討論的,一個(gè)頁面由多個(gè)組成。的兼容性在安卓及以下是不支持的。 最近被分配到移動(dòng)端開發(fā)組,支持某活動(dòng)的頁面頁面制作。這算是我第一次真正接觸移動(dòng)端頁面制作,下面就談?wù)剛€(gè)人總結(jié)和思考。 整體流程 開會(huì)大體講解、討論與排期 -> 交互設(shè)計(jì) ...

    voyagelab 評(píng)論0 收藏0
  • 我的第一次移動(dòng)端頁面制作 — 總結(jié)與思考

    摘要:最近被分配到移動(dòng)端開發(fā)組,支持某活動(dòng)的頁面頁面制作。這算是我第一次真正接觸移動(dòng)端頁面制作,下面就談?wù)剛€(gè)人總結(jié)和思考。這無疑會(huì)增強(qiáng)程序的可維護(hù)性。規(guī)范正如上面討論的,一個(gè)頁面由多個(gè)組成。的兼容性在安卓及以下是不支持的。 最近被分配到移動(dòng)端開發(fā)組,支持某活動(dòng)的頁面頁面制作。這算是我第一次真正接觸移動(dòng)端頁面制作,下面就談?wù)剛€(gè)人總結(jié)和思考。 整體流程 開會(huì)大體講解、討論與排期 -> 交互設(shè)計(jì) ...

    Cheng_Gang 評(píng)論0 收藏0
  • CSS代碼重構(gòu)與優(yōu)化之路

    摘要:代碼重構(gòu)的目的我們寫代碼時(shí),不僅僅只是完成頁面設(shè)計(jì)的效果,還應(yīng)該讓代碼易于管理,維護(hù)。命名與備注命名是提高代碼可讀性的第一步,也是及其重要的一步。 寫CSS的同學(xué)們往往會(huì)體會(huì)到,隨著項(xiàng)目規(guī)模的增加,項(xiàng)目中的CSS代碼也會(huì)越來越多,如果沒有及時(shí)對(duì)CSS代碼進(jìn)行維護(hù),CSS代碼不斷會(huì)越來越多。CSS代碼交錯(cuò)復(fù)雜,像一張龐大的蜘蛛網(wǎng)分布在網(wǎng)站的各個(gè)位置,你不知道修改這行代碼會(huì)有什么影響,所以...

    fou7 評(píng)論0 收藏0
  • CSS代碼重構(gòu)與優(yōu)化之路

    摘要:代碼重構(gòu)的目的我們寫代碼時(shí),不僅僅只是完成頁面設(shè)計(jì)的效果,還應(yīng)該讓代碼易于管理,維護(hù)。命名與備注命名是提高代碼可讀性的第一步,也是及其重要的一步。 寫CSS的同學(xué)們往往會(huì)體會(huì)到,隨著項(xiàng)目規(guī)模的增加,項(xiàng)目中的CSS代碼也會(huì)越來越多,如果沒有及時(shí)對(duì)CSS代碼進(jìn)行維護(hù),CSS代碼不斷會(huì)越來越多。CSS代碼交錯(cuò)復(fù)雜,像一張龐大的蜘蛛網(wǎng)分布在網(wǎng)站的各個(gè)位置,你不知道修改這行代碼會(huì)有什么影響,所以...

    不知名網(wǎng)友 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

xiaodao

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<