如何構建更簡潔的前端架構?

目錄

為什么需要前端架構?

那么,前端架構是什么樣的呢?

使用了哪些層?

那么,這種架構會出什么問題呢?

我們應該如何避免這些錯誤?

哪些原則應適用于組件?

Anti-Patterns 反模式

總結

介紹一款Java+Springboot+Vue的前端框架

?

干凈的前端架構,圍繞這個話題有很多原則:

SOLID、KISS(保持簡單明了)、DRY(不要重復自己)、DDD(領域驅動設計)等等。

為什么需要前端架構?

功能性和非功能性的要求不僅應該在后端應用,還應該在前端應用。因此,有了前端架構,我們就能滿足業務需求。此外,我們能夠更好地理解項目的復雜性,從而降低項目的風險、時間和成本。然而,作者認為,前端架構的最有價值的原因是任何項目的可維護性和可擴展性。

那么,前端架構是什么樣的呢?

根據作者的經驗,大多數時候都使用分層架構。但是,也會有一些項目采用了六邊形架構。

下圖簡單地描繪了一個TripAgency項目。

使用了哪些層?

  • API:由 Open-API 生成器生成的DTO和服務
  • 服務:包括映射器(DTO到前端模型,反之亦然)和使用 REST 端點與 API 通信的服務
  • 存儲:包含從服務層檢索到的所有數據
  • Booking:包括模型和組件在內的領域。智能組件( Smart-Components)直接與商店互動,而啞組件(Dumb components)只是可以在多個上下文中應用的組件,因此要簡單得多。

那么,這種架構會出什么問題呢?

那么,如果沒有定義規則,開發人員就可能直接在其組件中使用 DTO,或者在沒有存儲的情況下與服務層通信。或者更糟糕的是,啞組件會與服務層對話。

我們應該如何避免這些錯誤?

只需定義一些規則來防止這種情況發生即可。最常見的方法之一就是在項目中引入 Bit 或 Nx。

什么是 Bit?什么是 Nx?

Bit 和 Nx 是功能強大的開源構建系統,可提供用于提高開發人員工作效率、優化 CI 性能和維護代碼質量的工具和技術

因此,在使用 Bit 或 Nx 時,我們可能會應用依賴規則。因此,如果使用了錯誤的層,開發人員就會出錯。

我們可以將一些 DDD(域驅動設計)概念應用到我們的 Booking 域中。因此,我們將預訂域劃分為一些子域。每個子域都有自己的邊界上下文和泛在語言。如下圖所示。

每個子域使用分層架構,這些子域之間的交互使用 API。功能包括智能組件和服務、用戶界面(UI)、啞組件、域模型和 Util 所有實用功能,這些功能都在此邊界上下文中使用。我們已經很接近了,但還沒到那一步。僅有架構是不夠的,底層組件和業務邏輯也必須使用清潔代碼原則。因此,讓我們放大功能層和用戶界面層。

哪些原則應適用于組件?

首先是?SOLID 原則。每個組件必須只有一個責任(單一責任原則)。使用組合而非繼承(開放-封閉原則)。不要強迫組件實現不合適的接口,這意味著并非所有方法都有意義(接口隔離)。

其次,在將業務邏輯應用到組件、服務或 Util 時,不要忘記?KISS 原則。代碼要盡可能簡短。為什么要這樣做呢?更簡單的代碼更容易維護。

第三,盡量不要重復(DRY 原則)。將常用邏輯移至實用工具或服務中。

注:這些原則可以通過使用 Bit 輕松實現。在 Bit 工作區內,我們可以獨立構建、測試、版本控制和記錄可重復使用的組件(函數、用戶界面元素或數據模型),然后將其發布到 Bit 的組件共享平臺,在該平臺上,你(或其他人)可以輕松地將其導入到多個項目中。

聽起來很有道理。然而,如何才能知道哪些是應該避免的呢?簡而言之,什么是反模式?

Anti-Patterns 反模式

有一些比較常見的錯誤?

  • 導入不必要的庫,增大捆綁包大小
  • 使用嵌套訂閱
  • 在模板中添加業務邏輯
  • 未經測試的業務邏輯

所以,這些都是反模式。但如何確保代碼的可維護性呢?大家可能都知道,業務邏輯會隨著時間的推移而增長。簡而言之,經常會聽到以下說法。

代碼有了歷史性的發展。起初,它是 "干凈代碼"(Clean Code),但現在我們的代碼已經無法像以前那樣容易維護了。

是的,這是一個非常常見的問題。不過,以下簡單的規則可以幫助我們保持可維護性。

  • 定義eslint規則
  • 使用stylelint
  • 測試業務邏輯
  • 構建小型可重用的組件
  • 使用ES6和Typescript功能

總結

本文介紹了一個簡潔架構的例子,并概述了一些可以應用的原則。此外,還將 DDD 引入了前端架構。最后,介紹了創建組件和添加業務邏輯時的一些規則,希望這些代碼能夠保持可維護性。

不過,開發人員團隊在進行代碼審查和添加新功能時必須具備較高的標準,否則清潔架構可能不足以保持可維護性。

希望這能幫助大家構建更簡潔的前端架構。

介紹一款Java+Springboot+Vue的前端框架

這是一款基于SpringBoot+Vue的前后端分離的項目,麻雀雖小,五臟俱全,開箱即用!

JNPF開發平臺的前端采用Vue.js,這是一種流行的前端JavaScript框架,用于構建用戶界面。Vue.js具有輕量級、可擴展性強和生態系統豐富等特點,被廣泛應用于構建單頁面應用程序。

后端采用SpringBoot,這是一種基于Java的開源框架,用于簡化Spring應用的初始搭建以及開發過程。SpringBoot通過自動配置和約定大于配置的原則,簡化了Spring應用的配置和開發。此外,JNPF還采用MyBatis-Plus作為持久層框架,它是一個功能強大的MyBatis擴展,可以大大簡化數據庫操作的開發。

核心功能:表單引擎、可視化引擎、BI引擎、流程引擎、權限引擎、門戶引擎、大屏引擎、接口中心、物聯平臺。

如果你現在對軟件開發感興趣,JNPF?可以提供了一個相當優秀的土壤。它是一個適合所有水平的用戶的低代碼學習平臺,無論是有經驗的開發者還是編程新手,都可以在這里找到適合自己的學習路徑。

嘗試自己開發一個應用!應用地址:https://www.jnpfsoft.com/?csdn

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160414.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160414.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160414.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小程序存在優惠卷遍歷,但是歪了

進入小程序,因為是一個小商城,所以照例先查看收貨地址是否存在越權,以及能否未授權訪問,但是發現不存在這些問題,所以去查看優惠卷 進入領券中心,點擊領取優惠券時抓包 發現數據包,存在敏感參數…

數據庫的級聯刪除

級聯刪除是指在數據庫中刪除一個對象時,與該對象有關的其他對象也被自動刪除。在 Django 中,級聯刪除通常通過在模型中定義外鍵時使用 on_delete 參數來實現。以下是一些常見的 on_delete 選項: 1.models.CASCADE: 當關聯的對象被刪除時&…

CentOS 7 使用Fmt庫

安裝 fmt Git下載地址:https://github.com/fmtlib/fmt 步驟1:首先,你需要下載fmt的源代碼。你可以從https://github.com/fmtlib/fmt或者源代碼官方網站下載。并上傳至/usr/local/source_code/ ? 步驟2:下載完成后&#xff…

【Docker】Docker安裝Nginx配置靜態資源

1.下載鏡像 2.創建nginx配置文件 3.創建nginx容器運行 4.配置nginx靜態資源 1.下載鏡像 Dockerhub官網:Docker docker pull nginx docker pull nginx下載最新版本 默認latest 下載指定版本docker pull nginx:xxx 2.創建nginx配置文件 啟動容器之前要創建nginx…

怎么使用sentinel,以及所有的知識點

Sentinel是一個開源的流量控制和實時監控系統,主要用于保護企業級應用程序免受不良的請求。下面是使用Sentinel需要了解的知識點: 1. 什么是流量控制? 流量控制指的是限制應用程序的請求流量,防止過多的請求超出系統的承受范圍。…

基于單片機停車場環境監測系統仿真設計

**單片機設計介紹, 基于單片機停車場環境監測系統仿真設計 文章目錄 一 概要二、功能設計設計思路 三、 軟件設計原理圖 五、 程序六、 文章目錄 一 概要 基于單片機的停車場環境監測系統是一種利用單片機技術實現環境監測和數據處理的系統。它可以感知停車場的溫濕…

Python (十一) 迭代器與生成器

迭代器 迭代器是訪問集合元素的一種方式,可以記住遍歷的位置的對象 迭代器有兩個基本的方法:iter() 和 next() 字符串,列表或元組對象都可用于創建迭代器 字符串迭代 str1 Python str_iter iter(str1) print(next(str_iter)) print(next(st…

zip4j壓縮使用總結

一、引入依賴 <dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.1</version></dependency>二、使用添加文件&#xff08;addFiles&#xff09;的方式生成壓縮包 /*** Author wan…

藍橋杯物聯網_STM32L071_2_繼電器控制

CubeMX配置&#xff1a; Function.c及Function.h&#xff1a; #include "Function.h" #include "gpio.h" void Function_LD5_ON(void){HAL_GPIO_WritePin(LD5_GPIO_Port, LD5_Pin, GPIO_PIN_RESET); }void Function_LD5_OFF(void){HAL_GPIO_WritePin(LD5_…

HarmonyOS應用開發者認證題目滿分指南

為了幫助大家快速的上手HarmonyOS應用程序開發&#xff0c;官方制作了一些免費的課程&#xff1a;HarmonyOS第一課。每個課程后面都有一些練習題&#xff0c;下面就是這些題目的滿分答案。 【習題】運行Hello World工程 判斷題 1.DevEco Studio是開發HarmonyOS應用的一站式集…

定時器如何計算觸發頻率?

定時器觸發頻率的計算公式為&#xff1a;定時器時鐘頻率/&#xff08;預分頻系數*計數周期1&#xff09;。其中&#xff0c;定時器時鐘頻率是指定時器所連接的總線頻率&#xff0c;預分頻系數和計數周期需要根據具體的需求進行設置。預分頻系數用于將總線頻率分頻&#xff0c;計…

Power Apps-下拉列表控件

插入一個下拉列表控件 設置值的兩種方式 1.通過屬性items寫數組設置 2.通過連接數據表&#xff0c;先在右側操作面板中選擇項目中的數據表 再從Value中選擇其中一列&#xff0c;下拉就可以選擇該列全部行的值 但是這樣會導致有很多重復的字段&#xff0c;所以可以在items屬性里…

好用的博客評論系統 Valine 使用及避坑指南

評論系統&#xff0c;即網站的一個小功能&#xff0c;展示評論內容和用戶輸入框。開源免費的評論系統可不多&#xff0c;原來很火的"多說"評論系統都關閉了&#xff0c;而Disqus又是國外的訪問受限。無意間發現了Valine&#xff0c;挺不錯的&#xff0c;分享給大家。…

如何用cmd命令快速搭建FTP服務

環境&#xff1a; Win10專業版 問題描述&#xff1a; 如何用cmd命令快速搭建FTP服務 解決方案&#xff1a; 1.輸入以下命令來安裝IIS&#xff08;Internet Information Services&#xff09;&#xff1a; dism /online /enable-feature /featurename:IIS-FTPServer /all …

IDEA集成Git

一、配置Git忽略文件 例如&#xff1a;用eclipse創建的項目有其特定的文件&#xff0c;例如&#xff1a;.classpath,.project文件&#xff0c;而用IDEA創建的項目也有其特定的文件&#xff1a;.xml,.iml,.target,我們需要最好忽略他們。 為什么要忽略他們&#xff1f; 與項目…

從Github登錄的雙因子驗證到基于時間戳的一次性密碼:2FA、OTP與TOTP

Github于2023-03-09推出一項提高軟件安全標準的措施&#xff0c;所有在Github上貢獻過代碼的開發人員在年底前必須完成 2FA&#xff08;Two-factory authentication&#xff0c;雙因子認證&#xff09;。初聽此事之時&#xff0c;不以為意&#xff0c;因為自己之前就知道雙因子…

關于2023年的裸辭對話

2023: 為什么要裸辭&#xff1f; 小蘇&#xff1a;因為我瘋了 2023&#xff1a;裸辭后悔嗎&#xff1f; 小蘇&#xff1a; 如果很快找到工作就不后悔&#xff0c;但是今年沒有工作&#xff0c;后悔裸&#xff0c;不后悔辭。 2023&#xff1a;關于市場環境的敏感度&#xff…

操作系統(三)| 進程管理下 經典進程問題分析 線程 死鎖

文章目錄 6.經典進程同步問題6.1 生產者-消費者問題 (既有同步又有互斥)6.2 讀者-寫者問題6.3 哲學家進餐問題6.4理發師問題 7. 進程之間通信7.1 共享存儲區7.2 消息傳遞7.3 管道 8.線程8.1 線程的實現機制 9 進程調度9.1 調度方式9.2 常見算法先來先服務 FCFS短進程優先 SPN最…

C++之常用的排序算法

C之常用的排序算法 sort #include<iostream> using namespace std; #include<vector> #include<algorithm> #include<functional> void Myptint(int val) {cout << val << " "; }void test() {vector<int> v;v.push_back(…

打破應用孤島,低代碼平臺效力幾何?

關于低代碼開發平臺&#xff0c;爭論有很多。有人認為它是第四代編程語言&#xff0c;有人認為它是開發模式的顛覆&#xff0c;有人認為它是企業管理模式的變革&#xff0c;也有人認為它空有其表。 不過&#xff0c;至少在目前看來&#xff0c;低代碼無疑是火爆的&#xff0c;…