搜尋
首頁web前端css教學域驅動的設計與React

域驅動的設計與React

關於如何在React世界中組織前端應用的指導很少。 (只需移動文件,直到“感覺正確”,大聲笑)。事實是我們可以做得更好。讓我們看一下您可能會考慮用於架構網站的一種模式。

首先,您可能會在 /組件和 /容器文件夾之間將代碼拆分。這適用於小網站,但您會發現自己在擴展到較大站點時會尋找更健壯的東西。幸運的是,數十年來對系統設計的研究為我們提供了許多模式,可以探索以創建可擴展的體系結構。

其中之一是域驅動的設計,在過去的幾年中,它恢復了知名度。讓我們探索如何在React-Land中使用它。

域驅動設計的底漆

域驅動設計(DDD)是通過將其基本數據模型與域邏輯聯繫起來來管理軟件應用程序複雜性的實踐。那是一口氣,所以讓我們進一步將其分解。

領域是一個本體,這意味著世界上的事物是如何分組的。例如,托樑一詞與建築構建領域具有非常特定的聯繫。另一個詞,例如邁克(Mike ),可以屬於多個領域,例如聖經名稱的領域(邁克爾(Michael)的縮寫)或與北約語音字母有關的政治領域。

當設計是域驅動的時,這意味著我們將域模型(例如撲克域中的撲克卡)放置在上下文(例如上下文分組,例如游戲)中,以幫助管理複雜性。

組織DDD網站

域驅動的設計專門用於處理生長站點的複雜性,因為它們添加了越來越多的模型。對於具有一個模型的站點來說,這確實沒有意義。一旦獲得大約四個型號,這是開始將模型綁定到多個上下文的好時機。這不是一個艱難的規則,因此不要覺得您必須闖入多種上下文,但是一旦您超過了四個模型,這些上下文分組就會開始浮出水面。

首先組織您的域

讓我們將Twitter作為我們組織的示例網站。在Twitter中分離域的一種方法是將我們的模型分開,以在推文和交互元素的動力和交互元素之間進行分配,這些元素可以使微博傳播和蓬勃發展。

這是在Twitter中分開關注點的唯一方法嗎?絕對不是! DDD的一個關鍵方面是沒有一種正確的方法來創建域。有很多方法可以將應用程序的有限上下文分開,因此不要過多地專注於我們選擇的體系結構。取而代之的是,將其用作跳板,以了解我們如何將DDD應用於前端代碼的組織。

也就是說,我們的代碼現在將結構化為這樣(假設您從諸如create-react-app之類的東西開始):

嘰嘰喳喳/
├─CS.CSS
├ -  app.js
├─..p.test.js
├ - 博客/
└─..-互動/

定義每個域中的組件和容器

現在我們已經設置了基本文件夾結構,現在該添加一些真實的組件了!從上面的域UML圖中查看,從在給定頁面上獲取數據的容器以及組織組成這些頁面的模板的組件將很有用。在擴展我們的應用程序上,我們現在已經有了以下結構(為簡單起見,請省略我們的隨附的test.js文件):

嘰嘰喳喳/
├─CS.CSS
├ -  app.js
├─..p.test.js
├ - 博客/
Homepage.js
│├├─-tweetcard.js
│││─-tweetdialog.js
││├前Tweetlist.js
││├─-tweetListItem.js
││├─-userpage.js
││└前Usercard.js
└─..-互動/
    ├ - ─遵循Button.js
    ├ - ─button.js
    └─— sharebutton.js

我們仍然保留應用程序文件以初始化對根級HTML標籤的反應。有了我們的域,我們開始構建我們的容器(例如主頁和用戶頁面)和組件(例如TweetCard和TweetListItem)。另外,我們可以進一步將域內的模型分割成看起來這樣:

嘰嘰喳喳/
└ - 博客/
    ├ - 用戶/
    Homepage.js
    ││├前Usercard.js
    ││└─-userpage.js
    └─..pweett/
        ├├前Tweetcard.js
        ├ -  tweetdialog.js
        ├ -  tweetlist.js
        └ - ─tweetListitem.js

但是,鑑於應用程序的大小,在此階段不需要。

添加助手,如果需要

當我們構建應用程序時,我們的UI將繼續增加複雜性。為了解決這個問題,我們有兩種方法可以將關注點並將邏輯從組件模板中撤出:主持人實用程序。主持人將所有視覺演示邏輯從模板中推出,以使視圖層盡可能清潔和簡單。實用程序在前端收集了與模板無關的所有其他邏輯的共享功能。讓我們檢查一下這些。

與主持人清理模板

想想Twitter個人資料。您在我的帳戶上看到哪些元素?

有與我的用戶直接相關的信息:名稱,處理,描述,位置,網站,生日,開始日期。其他模型之間也有一些關聯計數 - 其他有多少用戶關注我?我關注多少其他用戶?頁面上甚至沒有捕獲其他邏輯,例如我喜歡的推文,答复,媒體上傳和內容。為了適當地捕獲所有這些演示邏輯,我們可以在文件樹中添加一個附加文件,以將我們的演示者模式與JSX組件隔離:

嘰嘰喳喳/
└ - 博客/
    ├ - 用戶/
    ││├前Usercard.js
    │││前USERCARD.PRESENTER.JS

將邏輯推入公用事業

某些呈現邏輯是如此基本,以至於它在應用程序中是否在渲染中使用,它都可以在應用程序中有用。貨幣格式,驗證和時間戳記格式都是用例,我們可以從應用程序中的隔離公用事業功能中受益。這些住在哪裡?由於它們跨越了域,因此公用事業可以放在自己的文件夾中:

 嘰嘰喳喳/
    ├─CS.CSS
    ├ -  app.js
    ├─..p.test.js
    ├ - 博客/
    Homepage.js
    │├├─-tweetcard.js
    │││─-tweetdialog.js
    ││├前Tweetlist.js
    ││├─-tweetListItem.js
    ││├前Usercard.js
    │├├─-USERCARD.PRESENTERJS
    ││└─-userpage.js
    ├─..-互動/
    ││├站關注Button.js
    │││├-button.js
    sharebutton.js
    └ -  UTILS/
         ├ - 貨幣
         ├ - 時間
         └ - 驗證

沒有錯誤的方法來組織您的應用程序!

最終,選擇是您的。這只是您可以安排申請的眾多方法的一個例子。域驅動的設計是一種有價值的工具,因為它以有意義的方式將業務邏輯分開,為開發人員之間的域專業知識提供了更清晰的區別,並為易於組織和擴展您的代碼提供了規則。

但是,如果您正在尋找一種替代React應用程序文件結構的傳統混亂,請查看以域驅動的設計。這可能只是事情。

最後,如果您喜歡這種內容,並想了解有關前端,用戶界面開發以及UX設計和研究的更多信息(根據您在行業中的經驗組織),我會運行一個免費的新聞通訊,您可能想檢查一下。

以上是域驅動的設計與React的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
每周平台新聞:Galaxy Store的Web應用程序,Tappable Stories,CSS Subgrid每周平台新聞:Galaxy Store的Web應用程序,Tappable Stories,CSS SubgridApr 14, 2025 am 11:20 AM

在本週的綜述中:Firefox獲得了類似鎖匠的力量,三星的Galaxy Store開始支持Progressive Web Apps,CSS Subgrid正在Firefox發貨

每周平台新聞:Internet Explorer模式,搜索控制台中的速度報告,限制通知提示每周平台新聞:Internet Explorer模式,搜索控制台中的速度報告,限制通知提示Apr 14, 2025 am 11:15 AM

在本週的綜述中:Internet Explorer進入Edge,Google搜索控制台吹捧新的速度報告,而Firefox給出了Facebook' s Notification

CSS自定義屬性的範圍的功率(和樂趣)CSS自定義屬性的範圍的功率(和樂趣)Apr 14, 2025 am 11:11 AM

您可能至少已經對CSS變量有點熟悉了。如果沒有,這是兩秒鐘的概述:它們真的稱為自定義屬性

我們是程序員我們是程序員Apr 14, 2025 am 11:04 AM

構建網站正在編程。編寫HTML和CSS正在編程。我是程序員,如果您在這裡閱讀CSS-Tricks,那麼您很有可能是您

您如何從網站上刪除未使用的CSS?您如何從網站上刪除未使用的CSS?Apr 14, 2025 am 10:59 AM

在這裡,我想預先知道的是:這是一個很難的問題。如果您降落在這裡,因為您希望指向您可以運行的工具

圖片中的圖片網絡API簡介圖片中的圖片網絡API簡介Apr 14, 2025 am 10:57 AM

圖片中的圖片在2016年發行了Macos Sierra,在Safari瀏覽器中首次出現在網絡上。這使用戶可以彈出

使用Gatsby組織和準備圖像以使圖像模糊效果的方法使用Gatsby組織和準備圖像以使圖像模糊效果的方法Apr 14, 2025 am 10:56 AM

蓋茨比(Gatsby)進行了出色的處理和處理圖像。例如,它可以幫助您節省圖像優化的時間,因為您不必手動

哦,嘿,填充百分比基於父元素的寬度哦,嘿,填充百分比基於父元素的寬度Apr 14, 2025 am 10:55 AM

今天,我學到了一些有關基於百分比的(%)填充的知識,我腦海中完全錯了!我一直認為百分比填充是基於

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

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

SublimeText3 Mac版

SublimeText3 Mac版

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

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具