成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

程序的“通用性”和“過度設(shè)計(jì)”困境

開發(fā) 前端
在軟件工程中,設(shè)計(jì)的“通用性”確實(shí)是一個(gè)重要的考慮因素,但我們必須謹(jǐn)慎。過度設(shè)計(jì)和過度工程不僅不會(huì)提高代碼的可維護(hù)性,反而會(huì)增加開發(fā)和維護(hù)成本。在實(shí)際項(xiàng)目中,我們應(yīng)該根據(jù)當(dāng)前需求采用最簡單直接的解決方案,而不是為了未來的可能性增加當(dāng)前的復(fù)雜性。

在軟件工程的實(shí)際操作中,我常常遇到這樣一種現(xiàn)象:本可以用簡單代碼解決的問題,卻因?yàn)樵O(shè)計(jì)者過分關(guān)注“通用性”、“可維護(hù)性”和“可擴(kuò)展性”而變得不必要地復(fù)雜,難以理解。

他們的思維方式是這樣的:“這段代碼未來可能會(huì)在更多場景中使用,所以我現(xiàn)在應(yīng)該考慮它的可擴(kuò)展性?!苯Y(jié)果,他們?cè)诖a中加入了各種“框架結(jié)構(gòu)”,以便在未來有新需求時(shí),無需修改就能在新的地方使用。

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

作者并不否認(rèn)“通用性”的價(jià)值,我的一些程序也具有很高的通用性。然而,很多人所謂的“通用性”實(shí)際上適得其反,這種現(xiàn)象通常被稱為 “過度設(shè)計(jì)” 。關(guān)于過度設(shè)計(jì),有一個(gè)有趣的故事:

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

俄羅斯人也面臨同樣的問題,他們則用了鉛筆。

雖然這個(gè)故事是虛構(gòu)的,但它具備了伊索寓言的力量?,F(xiàn)在讓我們看看軟件行業(yè),可能會(huì)發(fā)現(xiàn):

代碼需要“重用”的場合比您想象的要少得多。

許多人在寫程序時(shí),連“當(dāng)前異?!倍继幚聿缓茫瑓s關(guān)注“未來的需求”。他們總是想象別人會(huì)重用這段代碼。然而,實(shí)際上,由于設(shè)計(jì)過于復(fù)雜,理解這些設(shè)計(jì)所需的心智努力已經(jīng)超過了從頭開始的成本。因此,大多數(shù)人根本不會(huì)使用他們的代碼,而是重新寫一個(gè)。有些人最終會(huì)發(fā)現(xiàn)自己甚至看不下去之前寫的代碼,更愿意刪除它并重新開始,而不是談?wù)撝赜谩?/p>

我們用一個(gè)簡單的例子來說明這一點(diǎn)。假設(shè)我們需要寫一個(gè)簡單的程序來計(jì)算兩個(gè)整數(shù)的和:

def add(a, b):
    return a + b

result = add(3, 5)
print(result)  # 輸出 8

這個(gè)函數(shù)非常直觀,可以很好地滿足當(dāng)前需求。然而,一些程序員可能會(huì)考慮未來可能需要更多的計(jì)算能力,因此設(shè)計(jì)了一個(gè)復(fù)雜的框架:

class Operation:
    def execute(self, a, b):
        raise NotImplementedError

class AddOperation(Operation):
    def execute(self, a, b):
        return a + b

class 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

雖然這個(gè)設(shè)計(jì)提供了可擴(kuò)展性,但在當(dāng)前只需計(jì)算兩個(gè)整數(shù)和的場景中,這個(gè)設(shè)計(jì)無疑增加了代碼的復(fù)雜性和理解成本。

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

還有一種情況是,這些設(shè)計(jì)為“共享”而寫的代碼在很多地方并沒有被使用,因此即使你完全手動(dòng)修改它們,也不會(huì)花費(fèi)很多時(shí)間。現(xiàn)在,隨著 IDE 技術(shù)的發(fā)展和各種高級(jí)重構(gòu)工具的出現(xiàn),批量代碼修改不再特別麻煩。過去需要在邏輯層面設(shè)計(jì)可維護(hù)性,現(xiàn)在只需在 IDE 中點(diǎn)擊幾下就能輕松完成。因此,在考慮設(shè)計(jì)框架之前,你還應(yīng)該考慮這些因素。

例如,在上面提到的復(fù)雜設(shè)計(jì)中,如果我們需要修改加法操作,我們需要修改多個(gè)類和文件。在這種情況下,我們可能會(huì)發(fā)現(xiàn)簡單的函數(shù)實(shí)現(xiàn)更容易維護(hù)和修改。

“考慮”通用性并不意味著你已經(jīng)準(zhǔn)確“掌握”了通用性

許多人考慮通用性,但他們并不準(zhǔn)確地看到未來可能需要修改的部分,因此他們的設(shè)計(jì)往往錯(cuò)失重點(diǎn)。當(dāng)新需求出現(xiàn)時(shí),發(fā)現(xiàn)最初認(rèn)為可能變化的部分并沒有變化,而那些認(rèn)為不變的部分卻發(fā)生了變化。

能夠準(zhǔn)確預(yù)測未來需求并從代碼中抽象出真正通用的框架是非常困難的任務(wù)。它不僅需要編程技能,還需要強(qiáng)大的觀察現(xiàn)實(shí)世界事物的能力。許多人設(shè)計(jì)的框架只是復(fù)制他人的經(jīng)驗(yàn),無法適應(yīng)實(shí)際需求。Java 世界中的許多設(shè)計(jì)模式就是由這些半吊子的人創(chuàng)造的。

例如,假設(shè)我們需要添加一個(gè)新的操作,如減法。如果我們沒有準(zhǔn)確掌握哪些部分需要通用設(shè)計(jì),我們可能會(huì)發(fā)現(xiàn)現(xiàn)有框架不適用于新需求:

class SubtractOperation(Operation):
    def execute(self, a, b):
        return a - b

operation = OperationFactory.get_operation('subtract')
result = operation.execute(10, 3)
print(result)  # 輸出 7

在這里,我們需要修改 OperationFactory 類以支持減法操作。這表明,雖然我們考慮了通用性,但我們沒有準(zhǔn)確掌握未來的需求,導(dǎo)致框架的靈活性有限。

初始設(shè)計(jì)的復(fù)雜性

如果在初始設(shè)計(jì)中過早地考慮未來需求,可能會(huì)導(dǎo)致不必要的復(fù)雜性和問題。因此,這種對(duì)未來變化的考慮阻礙了進(jìn)展。原本如果我們專注于解決當(dāng)前問題,可以取得很好的結(jié)果。然而,由于“通用性”帶來的復(fù)雜性,設(shè)計(jì)者每次都要多費(fèi)一些心思,無法創(chuàng)建優(yōu)雅的程序。

例如,在上面提到的復(fù)雜設(shè)計(jì)中,如果我們只需要一個(gè)簡單的加法操作,復(fù)雜的框架反而使初始設(shè)計(jì)變得臃腫且難以理解:

class Operation:
    def execute(self, a, b):
        raise NotImplementedError

class AddOperation(Operation):
    def execute(self, a, b):
        return a + b

class OperationFactory:
    @staticmethod
    def get_operation(op_type):
        if op_type == 'add':
            return AddOperation()
        raise ValueError("不支持的操作類型")

# 初始設(shè)計(jì)的復(fù)雜性。
operation = OperationFactory.get_operation('add')
result = operation.execute(3, 5)
print(result)  # 輸出 8

相比之下,只需執(zhí)行一個(gè)簡單的函數(shù)即可。

def add(a, b):
    return a + b

result = add(3, 5)
print(result)  # 輸出 8

理解和維護(hù)框架代碼的開銷

如果你設(shè)計(jì)了一個(gè)框架式的代碼,每個(gè)程序員都需要理解這個(gè)框架的構(gòu)建,才能在這個(gè)框架下編寫代碼,這帶來了學(xué)習(xí)成本。一旦發(fā)現(xiàn)這個(gè)框架有設(shè)計(jì)問題,依賴它的代碼可能需要修改,這帶來了修改成本。因此,在設(shè)計(jì)中加入“通用性”的初衷是為了節(jié)省未來的修改成本,但可能會(huì)增加當(dāng)前的開發(fā)和維護(hù)成本。

例如,在復(fù)雜的框架設(shè)計(jì)中,添加新操作類型需要理解多個(gè)類及其關(guān)系:

class MultiplyOperation(Operation):
    def execute(self, a, b):
        return a * b

# 理解和維護(hù)的成本。
operation = OperationFactory.get_operation('multiply')
result = operation.execute(3, 5)
print(result)  # 輸出 15

而在簡單的函數(shù)實(shí)現(xiàn)中,添加新功能相對(duì)簡單:

def multiply(a, b):
    return a * b

result = multiply(3, 5)
print(result)  # 輸出 15

結(jié)論

在軟件工程中,設(shè)計(jì)的“通用性”確實(shí)是一個(gè)重要的考慮因素,但我們必須謹(jǐn)慎。過度設(shè)計(jì)和過度工程不僅不會(huì)提高代碼的可維護(hù)性,反而會(huì)增加開發(fā)和維護(hù)成本。在實(shí)際項(xiàng)目中,我們應(yīng)該根據(jù)當(dāng)前需求采用最簡單直接的解決方案,而不是為了未來的可能性增加當(dāng)前的復(fù)雜性。

總的來說,簡潔直觀的代碼往往比復(fù)雜的框架更能滿足實(shí)際需求。我們應(yīng)在設(shè)計(jì)中保持平衡,避免過度工程,專注于解決當(dāng)前問題,同時(shí)為未來擴(kuò)展留有余地。

責(zé)任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2022-04-19 20:51:20

軟件開發(fā)耦合代碼

2023-08-14 08:03:25

前端應(yīng)用程序Typescript

2015-12-18 10:06:22

程序員擺脫困境

2023-05-09 09:04:29

代碼設(shè)計(jì)語言

2012-05-31 10:24:59

架構(gòu)

2013-08-20 09:33:59

程序員

2011-08-02 14:42:30

2011-05-12 12:45:54

程序員

2021-05-20 08:51:33

設(shè)計(jì)驅(qū)動(dòng)數(shù)據(jù)庫

2024-09-14 08:24:44

設(shè)計(jì)模式抽象工廠模式JDK

2011-05-12 09:27:15

程序員創(chuàng)業(yè)

2015-11-26 11:48:57

2013-06-19 10:04:34

炒作技術(shù)

2017-04-20 07:56:10

企業(yè)管理SaaS數(shù)據(jù)

2023-01-30 07:55:44

代碼過度設(shè)計(jì)

2012-03-27 11:08:23

Java

2021-04-28 21:45:37

數(shù)據(jù)庫交付設(shè)計(jì)

2015-08-18 15:22:01

虛擬化

2011-02-18 17:54:36

網(wǎng)站首頁 PET

2011-04-11 09:11:01

程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产成人网| 国产伦精品一区二区三区精品视频 | 亚洲不卡视频 | 在线观看视频91 | 91性高湖久久久久久久久_久久99 | 天天天操操操 | 国产精品视频一 | 深夜福利亚洲 | 久久精品色欧美aⅴ一区二区 | 一区二区三区四区在线 | 午夜电影网 | 中文字幕在线一区二区三区 | 日本在线网站 | caoporn视频 | 成人夜晚看av | 亚洲精品久久久 | 四虎av电影 | 国产一区免费 | 日本手机看片 | 免费成人高清 | 久久精品视频一区二区三区 | 黄色av观看 | www日| 午夜视频在线免费观看 | 亚洲一区二区三区在线视频 | 欧美一区二区三区在线观看 | 中文字幕二区 | 久久国产精品色av免费观看 | 日本三级在线网站 | 国产精品精品视频一区二区三区 | 日韩性在线 | 午夜天堂精品久久久久 | 久久天堂| 国产精品自拍视频 | 国产精品www | 亚洲国产精品一区二区第一页 | www.中文字幕.com | 国产精品久久亚洲7777 | 365夜爽爽欧美性午夜免费视频 | 四虎精品在线 | 免费观看一级特黄欧美大片 |