首頁 web前端 js教程 更少的檔案、更多的行與更多的檔案、更少的程式碼行

更少的檔案、更多的行與更多的檔案、更少的程式碼行

Jan 03, 2025 am 11:26 AM

Fewer Files, More Lines vs. More Files, Fewer Lines of Code

啊,經典的開發者辯論:**「更少的文件,更多的行」與「更多的文件,更少的行」。這就像選擇披薩配料一樣——每個人都有自己的偏好,但沒有人能完全滿意。

在組織拉取請求 (PR) 的程式碼時,有些人喜歡將內容保留在一個地方的簡單性,而有些人則喜歡將其分解為較小的、集中的文件。

最終,這不僅僅是關於你,而是為了拯救你和你的團隊的未來,讓他們免於日後理清混亂的程式碼庫。

讓我們深入研究一個實際場景。想像一下,開發人員的任務是在儀表板頁面上呈現小工具清單。這是最初的實作:

// Dashboard.js
export default function Dashboard() {
 const widgets = getWidgets();

  // Handles widget deletion
  const handleDelete = (id) => {};

  // Handles widget title update
  const handleUpdate = (id, newTitle) => {};

  return (
    <div>
      <h1>Dashboard</h1>
      <div className="widget-container">
        {widgets.map((widget) => (
          <div className="widget">
                  <h2>{widget.title}</h2>
                  <p>{widget.description}</p>
                  <span onClick={handleDelete}>?️</span>
                  <span onClick={handleUpdate}>✎</span>
          </div>
        ))}
      </div>
    </div>
  );
}
登入後複製
登入後複製

在審查過程中,有人建議將渲染各個小部件的邏輯分離到它們自己的元件中。開發者重構程式碼如下:

// Dashboard.js
export default function Dashboard() {
  const widgets = getWidgets();

  // Handles widget deletion
  const handleDelete = (id) => {};

  // Handles widget title update
  const handleUpdate = (id, newTitle) => {};

  return (
    <div>
      <h1>Dashboard</h1>
      <div className="widget-container">
        {widgets.map((widget) => (
          <Widget
            key={widget.id}
            widget={widget}
            onDelete={handleDelete}
            onUpdate={handleUpdate}
          />
        ))}
      </div>
    </div>
  );
}

// Widget component for individual widget
function Widget({ widget, onDelete, onUpdate }) {
  return (
    <div className="widget">
      <h2>{widget.title}</h2>
      <p>{widget.description}</p>
      <button onClick={() => onDelete(widget.id)}>?️</button>
      <button onClick={() => onUpdate(widget.id, "New Title")}>✏️</button>
    </div>
  );
}

// Can be even further moved to a separate file
// Widget.js
export default function Widget({ widget, onDelete, onUpdate }) {
  return (
    <div className="widget">
      <h2>{widget.title}</h2>
      <p>{widget.description}</p>
      <button onClick={() => onDelete(widget.id)}>?️</button>
      <button onClick={() => onUpdate(widget.id, "New Title")}>✏️</button>
    </div>
  );
}
登入後複製

最初的實作是不是看起來更簡單、更直接,特別是當額外的邏輯(例如處理分析)與小部件緊密相關時,導致增加了 props 和上下文切換? ?這就提出了一個重要的問題:儀表板組件該採用哪一種方法?應該保留內聯實作、採用重構結構還是選擇混合方法? ?


何時將組件保留在同一文件中

  1. 小型專案或單一職責:
    • 如果 DashBoard 組件與 Widget 組件緊密耦合,並且您的項目很小,那麼將它們放在一起可以減少不必要的複雜性。
  2. 可重複使用性不太可能:
    • 當 Widget 元件不會在其他地方重複使用時,將其分離幾乎沒有好處。
  3. 可讀性:
    • 對於較小的元件,單一檔案可以更輕鬆地理解元件之間的關係,而無需上下文切換。
  4. 避免開銷:
    • 內嵌元件消除了額外的匯入/匯出語句,減少了簡單設定中的樣板程式碼。

何時使用單獨的文件

  1. 可重複使用性:
    • 如果 Widget 元件可能在其他地方使用,則單獨的檔案可以使其更易於存取和管理。
  2. 程式碼可讀性與組織:
    • 隨著文件變得越來越大,將它們分成更小的邏輯部分可以改善導航並減少認知負荷,特別是在較大的項目中。
  3. 測試與維護:
    • 單獨文件中的獨立元件更容易進行單元測試,從而實現更好的測試覆蓋率和可維護性。
  4. 關注點分離:
    • 遵循單一職責原則,單獨的文件確保每個組件都有明確、獨特的用途——這對於長期可維護性至關重要。
  5. 可擴充性:
    • 將元件分解為單獨的檔案可確保程式碼庫隨著專案的成長保持可管理性,從而能夠在不破壞現有功能的情況下無縫添加新功能

做出決定

對於這個 DashBoard 範例,您的選擇取決於專案的規模和組件的預期角色。由於這是一個小範例,Widget 不會被重複使用,因此單一檔案可以很好地工作:

// Dashboard.js
export default function Dashboard() {
 const widgets = getWidgets();

  // Handles widget deletion
  const handleDelete = (id) => {};

  // Handles widget title update
  const handleUpdate = (id, newTitle) => {};

  return (
    <div>
      <h1>Dashboard</h1>
      <div className="widget-container">
        {widgets.map((widget) => (
          <div className="widget">
                  <h2>{widget.title}</h2>
                  <p>{widget.description}</p>
                  <span onClick={handleDelete}>?️</span>
                  <span onClick={handleUpdate}>✎</span>
          </div>
        ))}
      </div>
    </div>
  );
}
登入後複製
登入後複製

對於較大或不斷增長的項目,分離 Widget 將有利於靈活性和可維護性

重點

平衡「單一文件中的更多行」與「更少行的更多文件」取決於專案的範圍、團隊規模和成長軌跡。做出決定時請考慮以下因素:

  • 組件有可能被重複使用嗎?
  • 父檔有多複雜?
  • 專案是否遵循慣例或特定的設計模式?
  • 程式碼庫會隨著時間的推移而大幅擴展嗎?

如果有人建議在 PR 審核期間將元件移至單獨的文件,請仔細檢查其好處是否符合這些考慮因素。

以上是更少的檔案、更多的行與更多的檔案、更少的程式碼行的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1276
29
C# 教程
1256
24
Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

從C/C到JavaScript:所有工作方式 從C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript和Web:核心功能和用例 JavaScript和Web:核心功能和用例 Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在行動中:現實世界中的示例和項目 JavaScript在行動中:現實世界中的示例和項目 Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

了解JavaScript引擎:實施詳細信息 了解JavaScript引擎:實施詳細信息 Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:社區,圖書館和資源 Python vs. JavaScript:社區,圖書館和資源 Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

Python vs. JavaScript:開發環境和工具 Python vs. JavaScript:開發環境和工具 Apr 26, 2025 am 12:09 AM

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

C/C在JavaScript口譯員和編譯器中的作用 C/C在JavaScript口譯員和編譯器中的作用 Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

See all articles