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

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 id="Dashboard">Dashboard</h1>
      <div classname="widget-container">
        {widgets.map((widget) => (
          <div classname="widget">
                  <h2 id="widget-title">{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 id="Dashboard">Dashboard</h1>
      <div classname="widget-container">
        {widgets.map((widget) => (
          <widget key="{widget.id}" widget="{widget}" ondelete="{handleDelete}" onupdate="{handleUpdate}"></widget>
        ))}
      </div>
    </div>
  );
}

// Widget component for individual widget
function Widget({ widget, onDelete, onUpdate }) {
  return (
    <div classname="widget">
      <h2 id="widget-title">{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 id="widget-title">{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 id="Dashboard">Dashboard</h1>
      <div classname="widget-container">
        {widgets.map((widget) => (
          <div classname="widget">
                  <h2 id="widget-title">{widget.title}</h2>
                  <p>{widget.description}</p>
                  <span onclick="{handleDelete}">?️</span>
                  <span onclick="{handleUpdate}">✎</span>
          </div>
        ))}
      </div>
    </div>
  );
}

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

重點

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

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

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

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

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

See all articles

熱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

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

熱門文章

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具