關注點分離的 JavaScript 應用程式

更新 發佈閱讀 10 分鐘

在現代 Web 開發中,框架的規範性對於團隊合作至關重要。這不僅提高了程式碼的一致性,也降低了理解他人程式碼的時間成本。現在,我們將以 JavaScript 為例,展示如何使用關注點分離的原則來撰寫一個簡單的應用喔。


框架選擇

常見的前端框架有三個:Vue、React 和 Angular。這些框架各有特色:

  • Vue:由尤雨溪開發,擁有友好的中文社群,適合初學者。
  • React:由 Facebook 開發,擁有廣泛的使用者群體,靈活性強。
  • Angular:由 Google 開發,適合大型應用,提供完整的解決方案。

我們主要會介紹Vue,如果有想知道其他框架的詳細內容可以留言告訴我喔!無論選擇哪個框架,都應選擇定期維護並且受歡迎的開源項目(如 MIT 授權),以確保使用過程中的安全性和穩定性。

關注點分離

關注點分離是一種軟體設計原則,旨在將不同功能的程式碼分開,讓程式更易於維護和理解。關注點分離在框架會有大量使用,以下是如何在 JavaScript 中實現這一原則的範例。

基本範例:計算陣列的總和

我們首先創建一個簡單的 HTML 結構,並用 JavaScript 將數據動態顯示在頁面上。

HTML 結構

<div>
<ul id="container"></ul>
<hr>
<p id="output"></p>
</div>



JavaScript 實現

以下是傳統寫法:

const data = [1, 2, 3];

// 一般寫法
const container = document.querySelector('#container');
const output = document.querySelector('#output');

let content = '';
let sum = 0;

for (let i = 0; i < data.length; i++) {
content += `<li>${data[i]}</li>`;
sum += data[i];
}
container.innerHTML = content;
output.textContent = sum;

使用關注點分離後的寫法:

const app = {
container: document.querySelector('#container'),
output: document.querySelector('#output'),
data: [1, 2, 3, 4],

// 計算data陣列總和的函式
sum() {
return this.data.reduce((acc, num) => acc + num, 0);
},

// 渲染畫面的函式
render() {
this.container.innerHTML = this.data.map(num => `<li>${num}</li>`).join('');
this.output.textContent = this.sum();
},

// 初始化
init() {
this.render();
},
}

// 執行app的初始化
app.init();

看出差別了嗎~


新增與刪除資料的範例

接下來,我們將實作一個可以新增和刪除資料的功能,一樣使用關注點分離的方式。

HTML 結構

<div>
<form>
<label>
姓氏
<input id="last-name" type="text">
</label>
<label>
名字
<input id="first-name" type="text">
</label>
<button id="add-btn" type="button">新增</button>
</form>
<ul id="container"></ul>
</div>

JavaScript 實現

const app = {
lastName: document.querySelector('#last-name'),
firstName: document.querySelector('#first-name'),
addBtn: document.querySelector('#add-btn'),
container: document.querySelector('#container'),
arr: [],

addListen() {
this.addBtn.addEventListener('click', () => {
const newEntry = {
id: new Date().getTime(),
lastName: this.lastName.value,
firstName: this.firstName.value,
};
this.arr.push(newEntry);
this.lastName.value = '';
this.firstName.value = '';
this.render();
});

this.container.addEventListener('click', (e) => {
const id = e.target.dataset.id;
if (!id) return;
this.deleteItem(Number(id));
});
},

render() {
const content = this.arr.map(item => `
<li>
<span>${item.lastName} ${item.firstName}</span>
<button data-id="${item.id}" type="button">刪除</button>
</li>
`).join('');
this.container.innerHTML = content;
},

deleteItem(id) {
const index = this.arr.findIndex(item => item.id === id);
if (index !== -1) {
this.arr.splice(index, 1);
this.render();
}
},

init() {
this.addListen();
},
}

app.init();

程式碼解析

  1. 宣告:將所有 DOM 元素和數據都放入一個物件中,便於管理。
  2. 事件監聽:使用箭頭函式來確保 this 總是指向 app 物件。新增按鈕和刪除按鈕的事件監聽器也清晰地分開。
  3. 渲染函式render 函式負責更新畫面,利用 map 方法將資料渲染為列表項。
  4. 刪除功能:透過資料的 id 進行刪除,並更新顯示。

總結

通過這種關注點分離的方式,我們的程式碼更具可讀性和可維護性。在開發過程中,選擇適合的框架和良好的程式撰寫習慣將使團隊協作更加順暢,這邊主要會練習專注點分離是要習慣後面使用Vue.js框加的寫法,接下來會介紹Vue.js的基礎。


對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!


提醒,文章僅供正當的知識參考,文章不負任何責任。


留言
avatar-img
阿棋的沙龍
3會員
34內容數
有軟體開發相關文章。
阿棋的沙龍的其他內容
2025/04/02
在現代網頁設計中,動畫和漸變效果不僅能讓網站更具吸引力,還能提升使用者體驗。今天來介紹兩個非常有趣且實用的 CSS 技巧:CSS 動畫和漸變背景。這些技術不需要額外的 JavaScript 支援,單純依賴 CSS 就可以完成動態效果,讓你的網站變得更加生動和互動。
2025/04/02
在現代網頁設計中,動畫和漸變效果不僅能讓網站更具吸引力,還能提升使用者體驗。今天來介紹兩個非常有趣且實用的 CSS 技巧:CSS 動畫和漸變背景。這些技術不需要額外的 JavaScript 支援,單純依賴 CSS 就可以完成動態效果,讓你的網站變得更加生動和互動。
2025/03/26
在網頁開發中,CSS 選擇器是幫助我們定位 HTML 元素並進行樣式設置的核心工具。無論你是前端新手還是資深開發者,熟練掌握 CSS 選擇器都是提升開發效率的關鍵。本篇文章將帶你從最基本的選擇器到一些進階技巧,讓你更高效地控制網頁元素的外觀。
2025/03/26
在網頁開發中,CSS 選擇器是幫助我們定位 HTML 元素並進行樣式設置的核心工具。無論你是前端新手還是資深開發者,熟練掌握 CSS 選擇器都是提升開發效率的關鍵。本篇文章將帶你從最基本的選擇器到一些進階技巧,讓你更高效地控制網頁元素的外觀。
2025/03/19
在創建動態且響應式的網頁設計時,HTML 和 CSS 是不可或缺的工具。在這篇文章中,將深入探討一些常見但卻非常強大的 CSS 屬性,包括如何使用 100% 和 100vw 的區別、背景效果的應用、parallax 效果的實現、以及如何有效地使用 vw 和 vh 來進行響應式設計。
2025/03/19
在創建動態且響應式的網頁設計時,HTML 和 CSS 是不可或缺的工具。在這篇文章中,將深入探討一些常見但卻非常強大的 CSS 屬性,包括如何使用 100% 和 100vw 的區別、背景效果的應用、parallax 效果的實現、以及如何有效地使用 vw 和 vh 來進行響應式設計。
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
文章探討近期銀行對於房貸申請的態度轉變,特別是財力一般的客戶面臨的困難,並介紹「國峰厝好貸」作為民間二胎房貸的選項。分析其優缺點,包括不受央行禁令影響、審核快速、核准率高等優勢,以及較高的利率(7%-16%)和民間借貸的風險。作者提醒讀者,若非走投無路,應謹慎評估,並建議諮詢專業人士。
Thumbnail
文章探討近期銀行對於房貸申請的態度轉變,特別是財力一般的客戶面臨的困難,並介紹「國峰厝好貸」作為民間二胎房貸的選項。分析其優缺點,包括不受央行禁令影響、審核快速、核准率高等優勢,以及較高的利率(7%-16%)和民間借貸的風險。作者提醒讀者,若非走投無路,應謹慎評估,並建議諮詢專業人士。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
Thumbnail
Vue.js是一種基於MVVM的前端JavaScript框架,類似的框架有React、Angular等。 架設環境 安裝Visual Studio Code(https://code.visualstudio.com/) 安裝Node.js(https://nodejs.org/en/
Thumbnail
Vue.js是一種基於MVVM的前端JavaScript框架,類似的框架有React、Angular等。 架設環境 安裝Visual Studio Code(https://code.visualstudio.com/) 安裝Node.js(https://nodejs.org/en/
Thumbnail
如果前人已經走出一條最佳路徑,我們只顧著欣賞也會到山頂 關注點的改變 一個好的架構都會希望讓開發者能專注在”業務邏輯”的實現,可以提高專案的開發效率、減少開發者非關業務邏輯的事情而煩惱。例如: 開發者A: 請問元件的對話窗如何在確認時控制關閉或開啟狀態? 這個實際案例是架構師認為對話窗的動作
Thumbnail
如果前人已經走出一條最佳路徑,我們只顧著欣賞也會到山頂 關注點的改變 一個好的架構都會希望讓開發者能專注在”業務邏輯”的實現,可以提高專案的開發效率、減少開發者非關業務邏輯的事情而煩惱。例如: 開發者A: 請問元件的對話窗如何在確認時控制關閉或開啟狀態? 這個實際案例是架構師認為對話窗的動作
Thumbnail
React 是開發網頁、手機前端最流行的 JavaScript 套件之一。React 由 Meta 開發。React 並不是一個框架。這是因為它只負責呈現 UI 的元件。不過,React 為 Angular 和 Vue 等框架提供了另一種解決方式,使我們可以與它一起完成覆雜的前端頁面功能。
Thumbnail
React 是開發網頁、手機前端最流行的 JavaScript 套件之一。React 由 Meta 開發。React 並不是一個框架。這是因為它只負責呈現 UI 的元件。不過,React 為 Angular 和 Vue 等框架提供了另一種解決方式,使我們可以與它一起完成覆雜的前端頁面功能。
Thumbnail
Vue3 學習筆記,元件與資料傳遞篇
Thumbnail
Vue3 學習筆記,元件與資料傳遞篇
Thumbnail
Vue3 學習筆記,專案建立與基礎響應式篇
Thumbnail
Vue3 學習筆記,專案建立與基礎響應式篇
Thumbnail
每個專案開發,都是由多個工程師來完成,就算只有一個人,隨著專案增量,你便會與過去的你面對面,這時候程式碼的可讀性高低就會成為左右你開發效率的一塊石頭,這篇就來說說幾個程式碼管理的小撇步
Thumbnail
每個專案開發,都是由多個工程師來完成,就算只有一個人,隨著專案增量,你便會與過去的你面對面,這時候程式碼的可讀性高低就會成為左右你開發效率的一塊石頭,這篇就來說說幾個程式碼管理的小撇步
Thumbnail
在我們使用的網站中,一個頁面會是由好幾個部份,例如按鈕、菜單、表格、卡片,這些部份可以在不同的畫面重複使用的就稱為元件(Component),今天要跟大家分享的「6個前端工程師私藏的元件庫」!
Thumbnail
在我們使用的網站中,一個頁面會是由好幾個部份,例如按鈕、菜單、表格、卡片,這些部份可以在不同的畫面重複使用的就稱為元件(Component),今天要跟大家分享的「6個前端工程師私藏的元件庫」!
Thumbnail
JavaScript 能做許多事,尤其透過瀏覽器的 API 或套件,我們得以悠游於巨量資料中,將資料轉換為與使用者溝通的介面,以下就來分享 15 個實用的 Vanilla JS 程式碼...
Thumbnail
JavaScript 能做許多事,尤其透過瀏覽器的 API 或套件,我們得以悠游於巨量資料中,將資料轉換為與使用者溝通的介面,以下就來分享 15 個實用的 Vanilla JS 程式碼...
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News