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

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

每個前端開發(fā)人員都應該了解的軟件工程原理

來源: 責編: 時間:2024-05-29 08:56:45 147觀看
導讀作為前端開發(fā)人員,我們常常專注于創(chuàng)建漂亮的用戶界面。然而,我們必須牢記,美也在于內在,完美像素的方法也應轉化為我們的代碼組織和結構。在本文中,我們將探討一些基本的軟件工程原則,每個前端開發(fā)人員都應該了解并在自己的

作為前端開發(fā)人員,我們常常專注于創(chuàng)建漂亮的用戶界面。然而,我們必須牢記,美也在于內在,完美像素的方法也應轉化為我們的代碼組織和結構。在本文中,我們將探討一些基本的軟件工程原則,每個前端開發(fā)人員都應該了解并在自己的項目中應用這些原則。VT828資訊網——每日最新資訊28at.com

1. DRY(不要重復)

DRY 原則強調代碼可重用性和維護的重要性。通過將通用功能提取到可重用組件、函數或模塊中來避免重復代碼。通過堅持 DRY 原則,您可以減少代碼重復,提高可維護性,并使您的代碼庫更加模塊化。React 鼓勵組件驅動的架構,其中職責被隔離,以便于未來的開發(fā)和可擴展性。VT828資訊網——每日最新資訊28at.com

讓我們以一個簡單的電子商務應用程序的產品頁面為例。我們希望看到一個待售產品列表。我們可以將頁面分解成更小的、可重復使用的組件。VT828資訊網——每日最新資訊28at.com

組件:VT828資訊網——每日最新資訊28at.com

  • ProductCard:顯示單個產品及其名稱、價格和描述。
  • ProductList:顯示產品列表。
// ProductCard.jsimport React from 'react';const ProductCard = ({ product }) => {  return (    <div>      <h2>{product.name}</h2>      <p>Price: ${product.price}</p>      <p>Description: {product.description}</p>    </div>  );};export default ProductCard;
// ProductList.jsimport React, { useState } from 'react';import ProductCard from './ProductCard';const ProductList = () => {  const [products, setProducts] = useState([    { id: 1, name: 'Product 1', price: 9.99, description: 'Description 1' },    { id: 2, name: 'Product 2', price: 19.99, description: 'Description 2' },    // ...  ]);  return (    <div>      {products.map((product) => (        <ProductCard key={product.id} product={product} />      ))}    </div>  );};export default ProductList;

在這個示例中,我們可以看到,通過將有關產品的邏輯分離到 ProductCard 組件中,我們可以在 ProductList 組件的 map 功能中重復使用這些邏輯,從而避免為列表頁面中的每個產品項目重復編寫代碼。VT828資訊網——每日最新資訊28at.com

2. SOLID 原則

SOLID 是一個縮寫詞,代表面向對象設計的五個關鍵原則:VT828資訊網——每日最新資訊28at.com

  • 單一職責原則(SRP):每個模塊或類應該只有一個更改的理由。
  • 開放/封閉原則(OCP):軟件實體應該對擴展開放,對修改關閉。
  • 里氏替換原則(LSP):子類型應該可以替換其基本類型,而不改變程序的正確性。
  • 接口隔離原則 (ISP):不應強迫客戶端依賴于他們不使用的接口。
  • 依賴倒置原則(DIP):高層模塊不應該依賴于低層模塊。兩者都應該依賴于抽象。

讓我們看一下如何在 React TypeScript 組件中應用里氏替換原則 (LSP):VT828資訊網——每日最新資訊28at.com

// Vehicle.tsinterface Vehicle {  drive(): void;  name: string;}// Car.tsclass Car implements Vehicle {  constructor(private name: string) {    this.name = name;  }  drive(): void {    console.log(`Driving a ${this.name}`);  }}// Motorcycle.tsclass Motorcycle implements Vehicle {  constructor(private name: string) {    this.name = name;  }  drive(): void {    console.log(`Riding a ${this.name}`);  }}// App.tsximport React from 'react';import { Vehicle } from './Vehicle';import Car from './Car';import Motorcycle from './Motorcycle';function VehicleComponent(props: { vehicle: Vehicle }) {  props.vehicle.drive();  return <div>Driving a {props.vehicle.name}</div>;}const App = () => {  const car = new Car();  const motorcycle = new Motorcycle();  return (    <div>      <VehicleComponent vehicle={car} />      <VehicleComponent vehicle={motorcycle} />    </div>  );};export default App;

在此示例中,我們有一個定義 name 屬性和 drive 方法的 Vehicle 接口。然后我們有兩個具體的實現:Car 和 Motorcycle ,它們都實現 Vehicle 接口。VT828資訊網——每日最新資訊28at.com

在 App 組件中,我們創(chuàng)建 Car 和 Motorcycle 的實例并將它們傳遞給 VehicleComponent。VehicleComponent 在傳入的車輛對象上調用驅動方法。VT828資訊網——每日最新資訊28at.com

LSP 確保我們可以用 Car 或 Motorcycle 替換 Vehicle 接口,而不會改變程序的正確性。VehicleComponent 與 Car 和 Motorcycle 實例無縫協(xié)作,展示了子類型對其基本類型的可替換性。VT828資訊網——每日最新資訊28at.com

3. KISS(保持簡單,笨)

KISS 原則提倡設計和實現的簡單性。編寫易于理解、簡單且能做好一件事的代碼。避免不必要的復雜性和過度設計,因為從長遠來看,這可能會導致混亂和維護挑戰(zhàn)。VT828資訊網——每日最新資訊28at.com

讓我們看一下 Counter 組件的 2 個實現。VT828資訊網——每日最新資訊28at.com

// Complex Counterimport React, { useState, useEffect } from 'react';import { debounce } from 'lodash';const ComplexCounter = () => {  const [count, setCount] = useState(0);  const [clicked, setClicked] = useState(false);  const [error, setError] = useState(null);useEffect(() => {    if (clicked) {        setCount(prev => prev + 1)        setClicked(false)    }}, [clicked, setClicked]);  const handleClick = (clicked: boolean) => {    setClicked(!clicked);  };  return (    <div>      <p>Count: {count}</p>      <button onClick={() => handleClick(clicked)}>Increment</button>    </div>  );};export default ComplexCounter;
// Simple Counterimport React, { useState } from 'react';const SimpleCounter = () => {  const [count, setCount] = useState(0);  const handleClick = () => {    setCount(count + 1);  };  return (    <div>      <p>Count: {count}</p>      <button onClick={handleClick}>Increment</button>    </div>  );};export default SimpleCounter;

我們看到,ComplexCounter 的實現更難理解和維護,也更容易出錯。VT828資訊網——每日最新資訊28at.com

它為 clicked 和 useEffect 鉤子引入了不必要的狀態(tài)變量。VT828資訊網——每日最新資訊28at.com

這是一個如何不實現 React 組件的示例。VT828資訊網——每日最新資訊28at.com

4. YAGNI(你不需要它)

YAGNI 提醒我們避免基于推測的未來需求過早地添加功能。相反,應專注于正確實現當前所需的功能。當您構建一個非常以用戶為中心的產品時,這一點變得非常重要。最好不要根據您認為用戶可能想要的假設來引入新功能。使用適當的用戶研究框架和原型設計方法。VT828資訊網——每日最新資訊28at.com

通過遵循 YAGNI,您可以防止不必要的復雜性、減少開發(fā)時間并維護精簡的代碼庫。VT828資訊網——每日最新資訊28at.com

5. 干凈的代碼

干凈的代碼是可讀的、可理解的、可維護的。遵循編碼約定和最佳實踐,使用有意義的變量名稱,并編寫不言自明的代碼。保持函數和類小而集中,堅持一致的格式,并努力使代碼庫清晰。VT828資訊網——每日最新資訊28at.com

讓我們看一個簡單的實用函數,用于出于數據安全目的隱藏部分用戶的私人信息。VT828資訊網——每日最新資訊28at.com

const hashUsersPrivateInformation = (privateInformation: string): string => {  // 計算私人信息的長度,以確定需要屏蔽多少個字符  const maxLength = privateInformation.length > 4 ? privateInformation.length - 4 : privateInformation.length;// 創(chuàng)建正則表達式模式,以匹配所需的字符數  const regexPattern = `.{1,${maxLength}}`;  const regex = new RegExp(regexPattern);  return privateInformation.replace(regex, (match) => '*'.repeat(match.length));};

我們看到:VT828資訊網——每日最新資訊28at.com

  1. 函數的名稱是自我描述的
  2. 它包含可以幫助其他開發(fā)人員的有用注釋。
  3. 它有一個可以理解的主要目的。

我們應該以類似的方式構建我們的代碼。VT828資訊網——每日最新資訊28at.com

結論

將這些軟件工程原理融入您的前端開發(fā)工作流程中,您可以編寫質量更高的代碼,改善與團隊成員的協(xié)作,并構建強大且可擴展的應用程序。軟件工程不僅僅是編寫代碼;還涉及編寫代碼。它是為復雜問題創(chuàng)建可靠、可維護且優(yōu)雅的解決方案。VT828資訊網——每日最新資訊28at.com

原文:https://dev.to/gboladetrue/software-engineering-principles-every-frontend-developer-should-know-1ej7?ref=dailydevVT828資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-91361-0.html每個前端開發(fā)人員都應該了解的軟件工程原理

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

上一篇: 一圖勝千言!深度掌握 Python 繪圖

下一篇: 記一次 .NET某工控WPF程序被人惡搞的卡死分析

標簽:
  • 熱門焦點
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發(fā)展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統(tǒng)提供非預期的輸入并監(jiān)視異常結果來發(fā)現軟件漏洞的方法。可以用來發(fā)現應用程序、操作系統(tǒng)和網絡協(xié)議等中的漏洞或
  • 2023年,我眼中的字節(jié)跳動

    此時此刻(2023年7月),字節(jié)跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯(lián)網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 騰訊蓋樓,字節(jié)拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應該選擇什么樣的著裝?&rdquo;近日,在網絡上,一個與著裝相關的帖子引發(fā)關注,在該帖子里,一位在高級寫字樓亞洲金
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業(yè)評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就&ldquo;胡錫進炒股是否知道認真報道&rdquo;展開討論。有
  • 小米公益基金會捐贈2500萬元馳援北京、河北暴雨救災

    8月2日消息,今日小米科技創(chuàng)始人雷軍在其微博上發(fā)布消息稱,小米公益基金會宣布捐贈2500萬元馳援北京、河北暴雨救災。攜手抗災,京冀安康!以下為公告原文
  • SN570 NVMe SSD固態(tài)硬盤 價格與性能兼具

    SN570 NVMe SSD固態(tài)硬盤是西部數據發(fā)布的最新一代WD Blue系列的固態(tài)硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
Top 主站蜘蛛池模板: 酒泉市| 怀仁县| 诸暨市| 方城县| 偏关县| 顺昌县| 松溪县| 通辽市| 陆良县| 武陟县| 陈巴尔虎旗| 介休市| 昌邑市| 石阡县| 怀远县| 兴义市| 乃东县| 呼伦贝尔市| 惠来县| 会泽县| 邢台县| 滁州市| 秭归县| 尚义县| 敦化市| 德钦县| 昌江| 大同县| 万全县| 林芝县| 松溪县| 天台县| 阿拉善盟| 鄢陵县| 调兵山市| 吴忠市| 大邑县| 丰城市| 察哈| 田东县| 高淳县|