日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

程序的“通用性”和“過度設計”困境

來源: 責編: 時間:2024-06-24 09:13:17 197觀看
導讀在軟件工程的實際操作中,我常常遇到這樣一種現(xiàn)象:本可以用簡單代碼解決的問題,卻因為設計者過分關注“通用性”、“可維護性”和“可擴展性”而變得不必要地復雜,難以理解。他們的思維方式是這樣的:“這段代碼未來可能會在

uaN28資訊網——每日最新資訊28at.com

在軟件工程的實際操作中,我常常遇到這樣一種現(xiàn)象:本可以用簡單代碼解決的問題,卻因為設計者過分關注“通用性”、“可維護性”和“可擴展性”而變得不必要地復雜,難以理解。uaN28資訊網——每日最新資訊28at.com

他們的思維方式是這樣的:“這段代碼未來可能會在更多場景中使用,所以我現(xiàn)在應該考慮它的可擴展性。”結果,他們在代碼中加入了各種“框架結構”,以便在未來有新需求時,無需修改就能在新的地方使用。uaN28資訊網——每日最新資訊28at.com

“通用性”的價值與誤區(qū)

作者并不否認“通用性”的價值,我的一些程序也具有很高的通用性。然而,很多人所謂的“通用性”實際上適得其反,這種現(xiàn)象通常被稱為 “過度設計” 。關于過度設計,有一個有趣的故事:uaN28資訊網——每日最新資訊28at.com

傳說在上世紀60年代美國和俄羅斯的“太空競賽”期間,NASA 遇到了一個嚴重的技術問題:宇航員需要一支能在外太空真空環(huán)境中書寫的筆。最終,NASA 花費了150萬美元開發(fā)了這樣一支筆。不幸的是,這種筆在市場上并不暢銷。uaN28資訊網——每日最新資訊28at.com

俄羅斯人也面臨同樣的問題,他們則用了鉛筆。uaN28資訊網——每日最新資訊28at.com

雖然這個故事是虛構的,但它具備了伊索寓言的力量。現(xiàn)在讓我們看看軟件行業(yè),可能會發(fā)現(xiàn):uaN28資訊網——每日最新資訊28at.com

代碼需要“重用”的場合比您想象的要少得多uaN28資訊網——每日最新資訊28at.com

許多人在寫程序時,連“當前異常”都處理不好,卻關注“未來的需求”。他們總是想象別人會重用這段代碼。然而,實際上,由于設計過于復雜,理解這些設計所需的心智努力已經超過了從頭開始的成本。因此,大多數人根本不會使用他們的代碼,而是重新寫一個。有些人最終會發(fā)現(xiàn)自己甚至看不下去之前寫的代碼,更愿意刪除它并重新開始,而不是談論重用。uaN28資訊網——每日最新資訊28at.com

我們用一個簡單的例子來說明這一點。假設我們需要寫一個簡單的程序來計算兩個整數的和:uaN28資訊網——每日最新資訊28at.com

def add(a, b):    return a + bresult = add(3, 5)print(result)  # 輸出 8

這個函數非常直觀,可以很好地滿足當前需求。然而,一些程序員可能會考慮未來可能需要更多的計算能力,因此設計了一個復雜的框架:uaN28資訊網——每日最新資訊28at.com

class Operation:    def execute(self, a, b):        raise NotImplementedErrorclass AddOperation(Operation):    def execute(self, a, b):        return a + bclass OperationFactory:    @staticmethod    def get_operation(op_type):        if op_type == 'add':            return AddOperation()        # 可以添加更多操作類型。        raise ValueError("不支持的操作類型")operation = OperationFactory.get_operation('add')result = operation.execute(3, 5)print(result)  # 輸出 8

雖然這個設計提供了可擴展性,但在當前只需計算兩個整數和的場景中,這個設計無疑增加了代碼的復雜性和理解成本。uaN28資訊網——每日最新資訊28at.com

實際修改代碼所需的工作量比你想象的少

還有一種情況是,這些設計為“共享”而寫的代碼在很多地方并沒有被使用,因此即使你完全手動修改它們,也不會花費很多時間。現(xiàn)在,隨著 IDE 技術的發(fā)展和各種高級重構工具的出現(xiàn),批量代碼修改不再特別麻煩。過去需要在邏輯層面設計可維護性,現(xiàn)在只需在 IDE 中點擊幾下就能輕松完成。因此,在考慮設計框架之前,你還應該考慮這些因素。uaN28資訊網——每日最新資訊28at.com

例如,在上面提到的復雜設計中,如果我們需要修改加法操作,我們需要修改多個類和文件。在這種情況下,我們可能會發(fā)現(xiàn)簡單的函數實現(xiàn)更容易維護和修改。uaN28資訊網——每日最新資訊28at.com

“考慮”通用性并不意味著你已經準確“掌握”了通用性

許多人考慮通用性,但他們并不準確地看到未來可能需要修改的部分,因此他們的設計往往錯失重點。當新需求出現(xiàn)時,發(fā)現(xiàn)最初認為可能變化的部分并沒有變化,而那些認為不變的部分卻發(fā)生了變化。uaN28資訊網——每日最新資訊28at.com

能夠準確預測未來需求并從代碼中抽象出真正通用的框架是非常困難的任務。它不僅需要編程技能,還需要強大的觀察現(xiàn)實世界事物的能力。許多人設計的框架只是復制他人的經驗,無法適應實際需求。Java 世界中的許多設計模式就是由這些半吊子的人創(chuàng)造的。uaN28資訊網——每日最新資訊28at.com

例如,假設我們需要添加一個新的操作,如減法。如果我們沒有準確掌握哪些部分需要通用設計,我們可能會發(fā)現(xiàn)現(xiàn)有框架不適用于新需求:uaN28資訊網——每日最新資訊28at.com

class SubtractOperation(Operation):    def execute(self, a, b):        return a - boperation = OperationFactory.get_operation('subtract')result = operation.execute(10, 3)print(result)  # 輸出 7

在這里,我們需要修改 OperationFactory 類以支持減法操作。這表明,雖然我們考慮了通用性,但我們沒有準確掌握未來的需求,導致框架的靈活性有限。uaN28資訊網——每日最新資訊28at.com

初始設計的復雜性

如果在初始設計中過早地考慮未來需求,可能會導致不必要的復雜性和問題。因此,這種對未來變化的考慮阻礙了進展。原本如果我們專注于解決當前問題,可以取得很好的結果。然而,由于“通用性”帶來的復雜性,設計者每次都要多費一些心思,無法創(chuàng)建優(yōu)雅的程序。uaN28資訊網——每日最新資訊28at.com

例如,在上面提到的復雜設計中,如果我們只需要一個簡單的加法操作,復雜的框架反而使初始設計變得臃腫且難以理解:uaN28資訊網——每日最新資訊28at.com

class Operation:    def execute(self, a, b):        raise NotImplementedErrorclass AddOperation(Operation):    def execute(self, a, b):        return a + bclass OperationFactory:    @staticmethod    def get_operation(op_type):        if op_type == 'add':            return AddOperation()        raise ValueError("不支持的操作類型")# 初始設計的復雜性。operation = OperationFactory.get_operation('add')result = operation.execute(3, 5)print(result)  # 輸出 8

相比之下,只需執(zhí)行一個簡單的函數即可。uaN28資訊網——每日最新資訊28at.com

def add(a, b):    return a + bresult = add(3, 5)print(result)  # 輸出 8

理解和維護框架代碼的開銷

如果你設計了一個框架式的代碼,每個程序員都需要理解這個框架的構建,才能在這個框架下編寫代碼,這帶來了學習成本。一旦發(fā)現(xiàn)這個框架有設計問題,依賴它的代碼可能需要修改,這帶來了修改成本。因此,在設計中加入“通用性”的初衷是為了節(jié)省未來的修改成本,但可能會增加當前的開發(fā)和維護成本。uaN28資訊網——每日最新資訊28at.com

例如,在復雜的框架設計中,添加新操作類型需要理解多個類及其關系:uaN28資訊網——每日最新資訊28at.com

class MultiplyOperation(Operation):    def execute(self, a, b):        return a * b# 理解和維護的成本。operation = OperationFactory.get_operation('multiply')result = operation.execute(3, 5)print(result)  # 輸出 15

而在簡單的函數實現(xiàn)中,添加新功能相對簡單:uaN28資訊網——每日最新資訊28at.com

def multiply(a, b):    return a * bresult = multiply(3, 5)print(result)  # 輸出 15

結論

在軟件工程中,設計的“通用性”確實是一個重要的考慮因素,但我們必須謹慎。過度設計和過度工程不僅不會提高代碼的可維護性,反而會增加開發(fā)和維護成本。在實際項目中,我們應該根據當前需求采用最簡單直接的解決方案,而不是為了未來的可能性增加當前的復雜性。uaN28資訊網——每日最新資訊28at.com

總的來說,簡潔直觀的代碼往往比復雜的框架更能滿足實際需求。我們應在設計中保持平衡,避免過度工程,專注于解決當前問題,同時為未來擴展留有余地。uaN28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-95919-0.html程序的“通用性”和“過度設計”困境

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C++ vs Rust vs Go 性能比較

下一篇: 字節(jié)面試:說說零拷貝技術實現(xiàn)原理?

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
好看的亚洲午夜视频在线| 亚洲视频免费| 久久se精品一区精品二区| 欧美视频在线观看视频极品| 一本一本久久| 久久国产日韩| 国产精品豆花视频| 欧美精品久久久久久| 一本大道久久精品懂色aⅴ| 久久人人97超碰精品888| 亚洲天堂网站在线观看视频| 国产精品一区二区三区久久| 欧美在线播放高清精品| 亚洲国产精品久久久久秋霞蜜臀| 欧美精品导航| 久久久久久久久岛国免费| 一本一本久久a久久精品综合麻豆| 国产精品欧美精品| 欧美国产在线观看| 性欧美18~19sex高清播放| 亚洲国内自拍| 国产综合香蕉五月婷在线| 欧美手机在线| 免费91麻豆精品国产自产在线观看| 亚洲视频免费在线| 尤妮丝一区二区裸体视频| 国产精品久久久久高潮| 欧美va天堂va视频va在线| 亚洲永久免费| 亚洲精品欧美精品| 国产精品区一区二区三区| 欧美大秀在线观看| 亚洲国产精品专区久久| 午夜视频一区二区| 国产一区二区电影在线观看| 欧美一级片在线播放| 欧美三级午夜理伦三级中视频| 亚洲欧洲在线看| 欧美日韩一区二区在线| 国产一区二区三区视频在线观看| 亚洲欧美日韩国产一区二区三区 | 亚洲综合成人在线| 亚洲国产免费看| 一区二区亚洲精品| 欧美在线亚洲一区| 一本色道久久综合狠狠躁的推荐| 久久激情综合网| 欧美日韩一级片在线观看| 黄色成人精品网站| 亚洲免费伊人电影在线观看av| 欧美国产专区| 在线精品亚洲| 久久av资源网| 国产精品免费一区二区三区在线观看 | 一区二区三区欧美成人| 欧美xx视频| 国产主播一区二区三区四区| 亚洲在线成人精品| 欧美日韩少妇| 亚洲精品九九| 免费欧美在线视频| 一区二区亚洲精品国产| 极品av少妇一区二区| 午夜视黄欧洲亚洲| 欧美天天影院| 在线视频欧美一区| 欧美日韩另类视频| 亚洲精品一区二区三区蜜桃久| 毛片精品免费在线观看| 在线不卡a资源高清| 久久久亚洲高清| 国产一区在线免费观看| 久久福利一区| 国产一区二区三区久久精品| 欧美一区二区高清在线观看| 国产精品一卡二| 亚洲欧美一区二区三区在线 | 精品999成人| 久久久水蜜桃| 尤物九九久久国产精品的特点 | 亚洲特级毛片| 欧美午夜视频| 亚洲一二区在线| 国产精品久久久久免费a∨ | 欧美理论在线播放| 99国产精品私拍| 欧美三级电影网| 亚洲资源在线观看| 国产欧美激情| 久久国产精品99国产精| 黄色成人片子| 猫咪成人在线观看| 亚洲精品美女在线观看播放| 欧美激情1区2区| 亚洲美女精品成人在线视频| 欧美日韩免费精品| 亚洲视频网站在线观看| 国产精品你懂的在线欣赏| 午夜视频在线观看一区二区三区 | 亚洲精品少妇30p| 欧美日韩国产123| 亚洲综合99| 国产一区二区三区四区hd| 久久免费高清视频| 亚洲破处大片| 国产精品a久久久久久| 午夜久久影院| 韩国av一区二区三区在线观看| 久久综合狠狠| 亚洲乱码久久| 国产精品爽爽爽| 久久久久国产一区二区三区| 亚洲国产精品va在线观看黑人| 在线看欧美日韩| 欧美黄在线观看| 亚洲一区二区在线| 国内精品亚洲| 欧美久久久久中文字幕| 亚洲一区二区视频| 国内精品嫩模av私拍在线观看| 欧美成人久久| 亚洲中午字幕| 伊人精品成人久久综合软件| 欧美日韩国产精品自在自线| 欧美亚洲一区| 亚洲欧洲一区| 国产精品一区二区久久久久| 猛男gaygay欧美视频| 亚洲一区在线观看视频 | 欧美性生交xxxxx久久久| 久久国产免费看| 亚洲精品在线观| 国产酒店精品激情| 欧美成人精精品一区二区频| 亚洲中午字幕| 亚洲国产高清高潮精品美女| 国产精品久久久久久久久久尿 | 99精品热视频| 国内自拍一区| 欧美视频在线免费| 久久免费视频在线| 妖精视频成人观看www| 国产一区二区三区在线观看精品 | 国产亚洲欧美一级| 欧美精品久久99| 久久久久亚洲综合| 亚洲午夜久久久久久久久电影院| 影音先锋日韩资源| 国产精品女人网站| 欧美激情2020午夜免费观看| 久久不见久久见免费视频1| av不卡在线看| 国产主播一区二区| 欧美婷婷久久| 免费在线观看成人av| 欧美一区二区三区久久精品茉莉花| 亚洲精品老司机| 激情懂色av一区av二区av| 国产精品福利片| 欧美激情综合色| 久久青草久久| 欧美亚洲一区二区在线观看| 9色国产精品| 亚洲二区三区四区| 国产日韩欧美综合在线| 欧美色精品天天在线观看视频| 蜜桃久久精品乱码一区二区| 欧美中文字幕视频在线观看| 亚洲小说区图片区| 99国产精品国产精品久久| 亚洲激情中文1区| 韩国女主播一区| 国产乱码精品一区二区三| 欧美伦理一区二区| 欧美成人官网二区| 久久婷婷麻豆| 久久国产福利| 性伦欧美刺激片在线观看| 亚洲午夜激情| 宅男精品视频| 一本综合久久| 夜夜嗨av一区二区三区四季av | 久久精品一区二区三区四区| 亚洲欧美激情四射在线日| 亚洲视频综合| 亚洲视频第一页| 亚洲视频欧美在线| 99精品久久免费看蜜臀剧情介绍| 亚洲精品视频在线看| 亚洲国产日韩欧美综合久久| 黄色一区二区在线观看| 狠狠色综合网| 国内在线观看一区二区三区| 国产在线欧美日韩| 国产一区二区三区日韩欧美| 国产一区二区日韩精品欧美精品| 国产日产欧美一区| 国产亚洲精品久久久久婷婷瑜伽| 国产美女诱惑一区二区| 国产精品乱子久久久久| 国产美女高潮久久白浆| 国产视频一区二区在线观看 | 国产精品亚洲一区二区三区在线| 国产精品一级|