代碼優雅寫法之主幹邏輯

海街.jpg

扯淡

好的代碼 更多的也是爲了後期維護,哪怕後期不須要你來維護 ,清晰乾爽的代碼也會爲做者留下好的印象java

而且 在工做團隊中 能夠施加影響力編程

用主幹邏輯 消滅長代碼

業務場景

假期到了,想來場說走就走的旅行,輸入目的地,出發bash

雖然是說走就走,也不能什麼都不想開車就出發 由於:app

若是忘記帶錢包,可能只能走到油耗盡的地方 若是忘記帶 身份證,駕駛證 行車證 路上碰見交警查車 ... 若是出發前未檢查車箱裏面的油 ...... 若是汽車半路爆胎...... 若是距離下個服務區或高速出口還有100km,此時的你三急 若是 若是 若是 太多的若是ui

代碼實現之瀑布流

void journeyWithoutPlan(User user,Car car){

              if(user.haveMoney()){
                      throws TravelFailureException("未帶money");
              }

              if(user.haveIdCard()){
                      throws TravelFailureException("未帶身份證");
              }

              if(car.tireBlowout()){
                      throws TravelFailureException("汽車爆胎");
              }

              if(user.urgentBathroom()){
                     throws TravelFailureException("三急異常");
              }

              if(...){

              }
              
              //是否能夠繼續行走的斷定
              while(goOn()){
                  //是否到達目的地
                 if(arrived()){
                      break;
                 }
                 try{
                     user.drive(car);
                  }catch(TravelFailureException e){
                      if(e.code ==Code.IntValue("汽車爆胎")){
                            //修車
                       }
                       if(e.code ==Code.IntValue("三急異常")){
                           //緊急車道停車  開雙閃  路邊解決
                       }
                   }
              }
              happyEnding(user,car);
      }

      經歷各類異常的洗禮,終於到達目的地
      但接下來的遊玩中的各類異常正在悄悄逼近
      回頭看下代碼 邏輯挺清晰的 各類問題都想到了 滿意的嘴角微微上揚
      但已經忘記本身是誰了 要幹嗎了 
      從讀代碼的角度來講 長代碼不是一個好現象 是邏輯不清晰 概念不清淅 的體現
複製代碼

代碼實現之主幹邏輯

該業務的目的是 說走就走的旅行
  假如一切順利的話  就僅僅是  user.drive(car);
  旅行過程當中遇到問題提早初始化到預案中,人的預案,車的預案
  過程當中:
             人出現問題 ---->人的預案----> 下一步行動
             車出現問題 ---->車的預案----> 下一步行動
  生活場景中:
             車爆胎(車異常)   ---->  人判斷異常(識別異常)  ----> 響應預案
            
  
  user.initializeJourneyException();
  car.initializeJourneyException();

  void journeyWithoutPlan(User user,Car car){     
          //我要作的就是開車到目的地
           while(!arrived()){
                user.drive(car);
           }
          happyEnding(user,car);
  }

  class User{
        List<UserJourneyException>exceptions;
        public void initializeJourneyException(List<JourneyException> exces){
                   this.exceptions=exces;
        }

       void drive(Car car){
            try{
                   ......
              }catch(CarJourneyException e){
                  //旅行過程當中車預案處理
                  CarJourneyGenericPlan.hand(e,this,car);
              }catch(UserJourneyException ex){
                  //旅行過程當中人預案處理
                  UserJourneyGenericPlan.hand(e,this);
              }
      }
  }
複製代碼

比較

第一種風格是 自低向上的編程風格 嘗試解決全部的子問題 (接地氣) --------------->更高層次的組件(用了個人組件 出行全搞定)this

第二種風格是 自頂向下的編程風格 任務模塊清晰 可讀 (戰略清晰)--------------->計劃清晰易讀 模塊清晰(讀個人計劃 出行目標清晰可見)編碼

不鼓吹那種風格更好,其實大部分編碼都包含二者的組合 看如何平衡spa

不過既然在商業公司裏面作開發,咱們玩的就是軟件工程code

既然是工程 須要將大問題拆分紅小問題 而後再把這些問題的解決辦法組合去解決這個大問題cdn

總結

每一個業務模塊 每一個方法 都有本身的最終目的,編寫代碼時需清晰的認識到下一行代碼是不是最終目的裏必不可少的一環,剔除非主幹邏輯代碼

具備領導者思惟 安排各個模塊 各個方法各司其職

認清工做 軟件工程 仍是 計算機科學

長期維護的系統 代碼最終仍是要 可讀的 可讀的 可讀的

相關文章
相關標籤/搜索