最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何應(yīng)用?SOLID?原則在?React?中整理代碼之開閉原則

 更新時(shí)間:2022年07月15日 10:18:35   作者:蕭然似我  
React?不是面向?qū)ο?,但這些原則背后的主要思想可能是有幫助的,在本文中,我將嘗試演示如何應(yīng)用這些原則來編寫更好的代碼,對(duì)React?SOLID原則開閉原則相關(guān)知識(shí)感興趣的朋友一起看看吧

SOLID 是一套原則。它們主要是關(guān)心代碼質(zhì)量和可維護(hù)性的軟件專業(yè)人員的指導(dǎo)方針。

React 不是面向?qū)ο?,但這些原則背后的主要思想可能是有幫助的。在本文中,我將嘗試演示如何應(yīng)用這些原則來編寫更好的代碼。

在前一篇文章中,我們討論了單一責(zé)任原則。今天,我們將討論 SOLID 的第二個(gè)原則: 開閉原則。

本系列其他文章

如何應(yīng)用 SOLID 原則在 React 中整理代碼之單一原則

什么是開閉原則?

Robert c. Martin 認(rèn)為這個(gè)原則是面向?qū)ο笤O(shè)計(jì)最重要的原則。但他不是第一個(gè)定義這個(gè)概念的人。Bertrand Meyer 于 1988 年在他的《面向?qū)ο筌浖?gòu)造》一書中寫到了這一點(diǎn)。他解釋了開放/封閉原則:

軟件實(shí)體(類、模塊、功能等)應(yīng)該對(duì)擴(kuò)展開放,但對(duì)修改關(guān)閉。

這個(gè)原則告訴您以這樣一種方式來編寫代碼,即您能夠在不更改現(xiàn)有代碼的情況下添加其他功能。

讓我們看看我們?cè)谀睦锟梢詰?yīng)用這個(gè)原則。

讓我們從一個(gè)例子開始

假設(shè)我們有一個(gè) User 組件,其中我們傳遞用戶的詳細(xì)信息,這個(gè)類的主要目的是顯示該特定用戶的詳細(xì)信息。

這是一個(gè)很簡(jiǎn)單的開始。但是我們的生活并不是那么簡(jiǎn)單。幾天后,我們的經(jīng)理告訴我們系統(tǒng)中有三種類型的用戶: SuperAdmin、 Admin 等等。

它們每個(gè)都有不同的信息和功能。

一個(gè)糟糕的解決方案

第一個(gè)也是顯而易見的解決方案:在組件中包含一個(gè)條件,并根據(jù)不同的用戶類型呈現(xiàn)不同的信息。

import React from 'react';
export const User = ({user}) => {
    return <>
        <div> Name: {user.name}</div>
        <div> Email: {user.email}</div>
        {
            user.type === 'SUPER_ADMIN' &&
            <div> Details about super admin</div>
        }
        {
            user.type === 'ADMIN' &&
            <div> Details about admin</div>
        }
    </>
}

你知道這里出了什么問題嗎?

首先,我們的代碼現(xiàn)在是凌亂的。

其次,如果我們需要其他類型的用戶怎么辦?

然后,我們需要進(jìn)入 User.js,為特定類型的用戶添加另一個(gè)條件。

這明顯違反了開閉原則,因?yàn)槲覀儾辉试S更改 User 組件內(nèi)部的代碼。

解決方案是什么?

在這個(gè)場(chǎng)景中我們可以應(yīng)用兩種主要的技術(shù):

  • 高階組件(HOC)
  • 組件組合(Component composition)

在可能的情況下,最好采用第二種方法,但是在某些情況下,有必要使用 HOC。

現(xiàn)在,我們將使用 Facebook 推薦的一種技術(shù),稱為組件組合。

讓我們創(chuàng)建單獨(dú)的用戶組件

現(xiàn)在,我們需要以這樣一種方式設(shè)計(jì)代碼,即不需要在 User.js 組件中添加條件。讓我們?yōu)?SuperAdmin 創(chuàng)建一個(gè)單獨(dú)的組件:

import React from 'react';
import {User} from "./User";
 
export const SuperAdmin = ({user}) => {
 
    return <>
        <User user={user} />
        <div> This is super admin user details</div>
    </>
}

類似地,另一個(gè)是針對(duì) Admin 用戶的:

import React from 'react';
import {User} from "./User";
export const Admin = ({user}) => {
    return <>
        <User user={user} />
        <div> This is admin user details</div>
    </>
}

現(xiàn)在我們的 App.js 文件變成了:

import React from 'react';
import Admin from './Admin'
import SuperAdmin from './SuperAdmin'
export default function App = () =>{
  const user = {}
  const userByTypes = {
    'admin' : <Admin /> ,
    'superadmin' : <SuperAdmin />
  }
  return <div>
    {userByTypes[`${user.type}`]}
  <div/>
}

現(xiàn)在我們可以根據(jù)需要?jiǎng)?chuàng)建盡可能多的用戶類型。我們針對(duì)特定用戶的邏輯是封裝的,因此我們不需要為了任何額外的修改而重新檢查代碼。

有些人可能會(huì)說,我們正在不必要地增加文件數(shù)量。當(dāng)然,您可以暫時(shí)保持原樣,但是隨著應(yīng)用程序的復(fù)雜性增加,您肯定會(huì)感到痛苦。

注意

SOLID 是一套原則。它們并不是強(qiáng)制性的,您必須應(yīng)用于每個(gè)場(chǎng)景。作為一個(gè)經(jīng)驗(yàn)豐富的開發(fā)人員,您應(yīng)該在代碼長(zhǎng)度和可讀性之間找到一個(gè)很好的平衡。

要過分執(zhí)著于這些原則。事實(shí)上,有一句名言可以解釋這些情況:

Too Much SOLID

所以知道這些原則是好的,但是你必須保持平衡。對(duì)于一個(gè)或兩個(gè)額外的字段,您可能不需要這些組合,但是將它們分開肯定會(huì)有長(zhǎng)遠(yuǎn)的幫助。

總結(jié)

了解這些原則會(huì)讓你走很長(zhǎng)的路,因?yàn)樵谝惶旖Y(jié)束的時(shí)候,一段好的代碼才是最重要的,而且沒有單一的方法來做事情。

到此這篇關(guān)于如何應(yīng)用 SOLID 原則在 React 中整理代碼之開閉原則的文章就介紹到這了,更多相關(guān)React SOLID 原則 開閉原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React Router V4使用指南(精講)

    React Router V4使用指南(精講)

    這篇文章主要介紹了React Router V4使用指南(精講),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • Shopee在React?Native?架構(gòu)方面的探索及發(fā)展歷程

    Shopee在React?Native?架構(gòu)方面的探索及發(fā)展歷程

    這篇文章主要介紹了Shopee在React?Native?架構(gòu)方面的探索,本文會(huì)從發(fā)展歷史、架構(gòu)模型、系統(tǒng)設(shè)計(jì)、遷移方案四個(gè)方向逐一介紹我們?nèi)绾我徊讲降貪M足多團(tuán)隊(duì)在復(fù)雜業(yè)務(wù)中的開發(fā)需求,需要的朋友可以參考下
    2022-07-07
  • React html中使用react的兩種方式

    React html中使用react的兩種方式

    這篇文章主要介紹了React html中使用react的兩種方式,本文給大家提到了React pwa的配置代碼,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • React Diff原理深入分析

    React Diff原理深入分析

    這篇文章主要介紹了React Diff原理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下
    2021-04-04
  • 在React項(xiàng)目中添加吸頂效果的代碼示例

    在React項(xiàng)目中添加吸頂效果的代碼示例

    在大型Web應(yīng)用中,一個(gè)常見的設(shè)計(jì)需求是讓某些組件具有吸頂效果,這意味著當(dāng)頁面向下滾動(dòng)時(shí),該組件會(huì)保持在屏幕頂部,在本文中,我們將介紹如何在React項(xiàng)目中實(shí)現(xiàn)吸頂效果。我們將首先討論使用原生JavaScript領(lǐng)域的方法來實(shí)現(xiàn),然后將這些方法與React結(jié)合起來
    2023-06-06
  • ForwardRef?useImperativeHandle方法demo

    ForwardRef?useImperativeHandle方法demo

    這篇文章主要為大家介紹了ForwardRef?useImperativeHandle方法demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Redux中間件的使用方法教程

    Redux中間件的使用方法教程

    中間件就是一個(gè)函數(shù),對(duì)store.dispatch方法進(jìn)行了改造,在發(fā)出 Action 和執(zhí)行 Reducer 這兩步之間,添加了其他功能,要理解中間件,關(guān)鍵點(diǎn)是要知道,這個(gè)中間件是連接哪些部分的軟件,它在中間做了什么事,提供了什么服務(wù)
    2023-01-01
  • 使用React+SpringBoot開發(fā)一個(gè)協(xié)同編輯的表格文檔實(shí)現(xiàn)步驟

    使用React+SpringBoot開發(fā)一個(gè)協(xié)同編輯的表格文檔實(shí)現(xiàn)步驟

    隨著云計(jì)算和團(tuán)隊(duì)協(xié)作的興起,協(xié)同編輯成為了許多企業(yè)和組織中必不可少的需求,本文小編就將為大家介紹如何使用React+SpringBoot簡(jiǎn)單的開發(fā)一個(gè)協(xié)同編輯的表格文檔,感興趣的朋友一起看看吧
    2023-11-11
  • 前端框架react-spring基礎(chǔ)用法

    前端框架react-spring基礎(chǔ)用法

    這篇文章主要為大家介紹了前端框架react-spring基礎(chǔ)用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • ReactNative支付密碼輸入框?qū)崿F(xiàn)詳解

    ReactNative支付密碼輸入框?qū)崿F(xiàn)詳解

    這篇文章主要為大家介紹了ReactNative支付密碼輸入框?qū)崿F(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11

最新評(píng)論

宁都县| 巴塘县| 阜新市| 嘉荫县| 曲松县| 井冈山市| 徐水县| 抚宁县| 深泽县| 鄂托克前旗| 山西省| 南和县| 安塞县| 丰原市| 准格尔旗| 海淀区| 特克斯县| 山西省| 那曲县| 石首市| 云和县| 游戏| 自治县| 瑞昌市| 花莲县| 濮阳市| 郎溪县| 泽库县| 宁津县| 东丽区| 昌乐县| 黑山县| 黑水县| 河曲县| 盐亭县| 罗山县| 叶城县| 庐江县| 儋州市| 鹤山市| 襄城县|