<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 輪子多的原因 現實里程序員世界的代碼或者項目輪子特別多。產生這個現象的原因是什么呢? - 非我發明癥(Not Invent Here),指不信任、不使用非自己發明的技術 - 新手練習項目 - 技術選型時沒有參考類似自己需求的項目,就開始寫了 - 沒找到合適方案,自主創新 # 為什么我們要重構和移植輪子 > 他山之石可以攻玉 我們需要輪子,但是不能完全依賴于別人的輪子。 軟件行業有個現象,復制、拷貝代碼,濫用開源項目特別多。 有的人喜歡拿來主義,這個功能別人實現過了,有現成輪子,我要挑選足夠多的輪子。 我并不反對借用別人的輪子,有的時候還是有必要的,畢竟可以給大家節省大量寶貴的時間,不是嗎? 但是,開源軟件的思想是社區運營一個軟件,使得一個軟件可以獲得“永生”。 我們經常會聽說某個著名程序員,XXX之父去世的噩耗。然后各種懷念。世界上不會有第二個喬布斯。我們后人能做的,就是傳承他們的經典思想。 只是簡單的拷貝代碼,是初級程序員會做的。 他們并沒有領會那個輪子里所要表達,或者用到的令人驚嘆的技巧。他們沒對這份代碼做出任何巨大的貢獻,只是提供了一份備份,一個應用。 重要的話說三遍: 程序員是用抽象方法解決實際問題的! 程序員是用抽象方法解決實際問題的! 程序員是用抽象方法解決實際問題的! 雖然程序員經常被有限的時間和產品經理的各種需求所限制,但是好的程序員往往會制造出一個能滿足當前需要的輪子,來解決實際問題。 有的時候我們稱之為模式、模型。 當然,所有程序員并不是一開始就能產生經典,但是,人都是會進步的,代碼也一樣。 這就得益于程序員在遇到類似問題時的“不要重復自己(Dont repeat yourself)”原則、和有時間適當的優化,對自己工藝作品的不斷打磨、重構。 重構,是你的問題更明確、邏輯更清晰、代碼更合理簡潔。 至于移植,程序員往往開始解決問題時,局限于當時的語言環境,沒有像《Linux/Unix設計思想》里“舍高效率而取可移植性”原則去寫代碼。也受限于當時的眼光,沒有前瞻性。所作出的設計就有局限性。 所以很長一段時間,寫.net的只能試用windows,寫ios的只能使用mac,寫shell腳本的只能做Linux運維。 然后,事情就變的很復雜,大公司為了市場占有率只能 3方人才全招。 當我們想讓老設備上的代碼,運行在新機器上,就要移植; 當我們想讓win下通用程序運行在linux上,給用戶一致的體驗,就要移植。 想想當一個NES模擬器誕生后,先是pc后來到psp,再到電視盒子、智能手機上。 這都要經過程序員努力的移植。 # 重構的例子 在我到新公司里用lazyphp時,查詢都是用原生sql去查詢。比如:“get_line("SELECT `uid`,`tel` FROM `jduser` WHERE `email`='".s($email)."' AND `type` = 'recruiter'")” 這樣的,然后有時候會用到in 查詢,就需要 把 一個數組里的值轉換為 逗號分割的字符串, 給IN 關鍵詞來進行查詢,于是寫了這個build_in 函數。 ~~~ /** * 數組拼in 返回 */ function build_in($arr){ $ret = array(); foreach ($arr as $key => $value) { $ret[] = "'{$value}'"; } if($ret){ return implode(', ', $ret); }else{ return ''; } } ~~~ 后來發現 需要返回 1,2,3 這種給純數字的IN 而不是 '1','2','3' 所以需要修改 同時支持 返回數字和字符串的拼接。 ~~~ /** * 數組拼in 返回 */ function build_in($arr, $pureNum = false){ $ret = array(); if($pureNum){ $values = array_values($arr); return implode(',', $values); } foreach ($arr as $key => $value) { $ret[] = "'{$value}'"; } if($ret){ return implode(', ', $ret); }else{ return ''; } } ~~~ 加了一個默認為false的 純數字標識位參數 $pureNum。 后來發現,有的時候數組傳過來是空數組,改了讓空字數組直接返回空。 ~~~ /** * 數組拼in 返回 */ function build_in($arr, $pureNum = false){ $ret = array(); if($pureNum){ $values = array_values($arr); return empty($values)? '' : implode(',', $values); } foreach ($arr as $key => $value) { $ret[] = "'{$value}'"; } if($ret){ return implode(', ', $ret); }else{ return ''; } } ~~~ 后來發現多此一舉,空$arr, if($pureNum) 里面的$values 也是空,就改回去 ~~~ /** * 數組拼in 返回 */ function build_in($arr, $pureNum = false){ $ret = array(); if($pureNum){ $values = array_values($arr); return implode(',', $values); } foreach ($arr as $key => $value) { $ret[] = "'{$value}'"; } if($ret){ return implode(', ', $ret); }else{ return ''; } } ~~~ 最后,為了縮減生成的sql,純數字的,我強制轉換后拼接。 ~~~ /** * 數組拼in 返回 */ function build_in($arr, $pureNum = false){ $ret = array(); foreach ($arr as $key => $value) { if($pureNum) { $ret[] = intval($value); } else { $ret[] = "'".s($value)."'"; } } if($ret){ return implode(', ', $ret); }else{ return ''; } } ~~~ 拼接和字符串值的處理一樣了。 # 移植的例子 我第一個用的php框架是symfony,看到它的調試工具, ![2015-08-07/55c4776ab2d0d](http://box.kancloud.cn/2015-08-07_55c4776ab2d0d.png) ![2015-08-07/55c477782e3cc](http://box.kancloud.cn/2015-08-07_55c477782e3cc.png) 我就參照功能,移植了一個簡單的版本 [ThinkPHP3.0正式版自定義工具條](http://www.thinkphp.cn/extend/100.html): ![2015-08-07/55c477960b62c](http://box.kancloud.cn/2015-08-07_55c477960b62c.png) 這后來才有了后來3.1版的 ![2015-08-07/55c478c5cb688](http://box.kancloud.cn/2015-08-07_55c478c5cb688.png) ![2015-08-08/55c5a2a0a14c5](http://box.kancloud.cn/2015-08-08_55c5a2a0a14c5.png) ![2015-08-08/55c5a2b1a0d0a](http://box.kancloud.cn/2015-08-08_55c5a2b1a0d0a.png) 別人有的,我們參考了,移植過來。借鑒思想也是可以的嘛。好東西為什么我們不能用。比如以后的composer之類的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看