国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端設(shè)計(jì)模式和設(shè)計(jì)原則之設(shè)計(jì)原則

這篇具有很好參考價(jià)值的文章主要介紹了前端設(shè)計(jì)模式和設(shè)計(jì)原則之設(shè)計(jì)原則。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前端設(shè)計(jì)原則

1 開(kāi)閉原則

該原則指出軟件實(shí)體(類、模塊、函數(shù)等)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。也就是說(shuō),在添加新功能時(shí),應(yīng)該通過(guò)擴(kuò)展現(xiàn)有代碼來(lái)實(shí)現(xiàn),而不是直接修改已有的代碼。這樣可以確保現(xiàn)有代碼的穩(wěn)定性,并且減少對(duì)其他部分的影響。

// 開(kāi)閉原則示例

// 原始功能實(shí)現(xiàn)類
class OriginalFunctionality {
  performAction() {
    console.log("Original functionality");
  }
}

// 擴(kuò)展功能實(shí)現(xiàn)類
class ExtendedFunctionality extends OriginalFunctionality {
  performAction() {
    super.performAction();
    console.log("Extended functionality");
  }
}

// 使用示例
const functionality = new ExtendedFunctionality();
functionality.performAction();

在上述例子中,有一個(gè)原始功能實(shí)現(xiàn)類 OriginalFunctionality,它定義了一個(gè) performAction 方法來(lái)執(zhí)行某些功能。

根據(jù)開(kāi)閉原則,需要通過(guò)擴(kuò)展而不是修改原始功能類來(lái)添加新功能。因此,創(chuàng)建一個(gè)擴(kuò)展功能實(shí)現(xiàn)類 ExtendedFunctionality,它繼承自 OriginalFunctionality 并重寫了 performAction 方法,在執(zhí)行新功能之前先調(diào)用了原始功能。

通過(guò)應(yīng)用開(kāi)閉原則,可以減少對(duì)現(xiàn)有代碼的修改,從而提高代碼的穩(wěn)定性和可維護(hù)性。同時(shí),它也使得代碼更易于擴(kuò)展和重用,提供了更靈活的架構(gòu)設(shè)計(jì)。

這里,再介紹一個(gè)常見(jiàn)的開(kāi)閉原則示例

// 原始的 if-else 結(jié)構(gòu)
function performAction(option) {
  if (option === 'A') {
    console.log("Performing action A");
  } else if (option === 'B') {
    console.log("Performing action B");
  } else if (option === 'C') {
    console.log("Performing action C");
  } else {
    console.log("Invalid option");
  }
}

// 使用 key-value 形式執(zhí)行特定邏輯
const actions = {
  A: () => console.log("Performing action A"),
  B: () => console.log("Performing action B"),
  C: () => console.log("Performing action C"),
};

function performAction(option) {
  const action = actions[option];
  if (action) {
    action();
  } else {
    console.log("Invalid option");
  }
}

// 使用示例
performAction('A'); // 輸出: Performing action A
performAction('B'); // 輸出: Performing action B
performAction('C'); // 輸出: Performing action C
performAction('D'); // 輸出: Invalid option

if-else 結(jié)構(gòu)改成 key-value 形式來(lái)執(zhí)行特定邏輯,可以被視為一種應(yīng)用開(kāi)閉原則的方式。這樣的改變?cè)试S通過(guò)添加新的鍵值對(duì)來(lái)擴(kuò)展代碼,而不需要修改原有的邏輯。

2 單一職責(zé)原則

該原則提倡每個(gè)類或模塊應(yīng)該只負(fù)責(zé)一個(gè)單一的功能或任務(wù)。這樣可以提高代碼的可讀性、可維護(hù)性和重用性。當(dāng)一個(gè)類具有多個(gè)職責(zé)時(shí),建議將其拆分為多個(gè)獨(dú)立的類,每個(gè)類專注于一個(gè)職責(zé)。

// 組件的單一職責(zé)示例

// 用戶列表組件,負(fù)責(zé)渲染用戶列表
class UserList {
  render(users) {
    // 渲染用戶列表邏輯...
    console.log("User list rendered:", users);
  }
}

// 用戶管理組件,負(fù)責(zé)處理用戶的增刪改操作
class UserManager {
  createUser(userData) {
    // 創(chuàng)建用戶邏輯...
    console.log("User created:", userData);
  }

  updateUser(userId, userData) {
    // 更新用戶邏輯...
    console.log("User updated:", userId, userData);
  }

  deleteUser(userId) {
    // 刪除用戶邏輯...
    console.log("User deleted:", userId);
  }
}

// 模塊的單一職責(zé)示例

// 用戶相關(guān)功能模塊,僅負(fù)責(zé)用戶相關(guān)的功能
const userModule = {
  createUser(userData) {
    // 創(chuàng)建用戶邏輯...
    console.log("User created:", userData);
  },

  updateUser(userId, userData) {
    // 更新用戶邏輯...
    console.log("User updated:", userId, userData);
  },

  deleteUser(userId) {
    // 刪除用戶邏輯...
    console.log("User deleted:", userId);
  }
};

// 函數(shù)的單一職責(zé)示例

// 檢查用戶名是否唯一
function checkUsernameUnique(username) {
  // 檢查用戶名唯一性邏輯...
  console.log("Checking username uniqueness:", username);
  return true;
}

// 驗(yàn)證密碼
function validatePassword(password) {
  // 驗(yàn)證密碼邏輯...
  console.log("Validating password:", password);
  return true;
}

// 使用示例
const userList = new UserList();
userList.render(["John", "Mike"]);

const userManager = new UserManager();
userManager.createUser({ name: "John", age: 25 });

userModule.updateUser(1, { name: "Mike" });

checkUsernameUnique("john123");

validatePassword("password123");

上述示例展示了組件、模塊和函數(shù)單一職責(zé)原則應(yīng)用。

  • 組件的單一職責(zé):UserList 組件負(fù)責(zé)渲染用戶列表,UserManager 組件負(fù)責(zé)處理用戶的增刪改操作。每個(gè)組件只負(fù)責(zé)一個(gè)特定的功能,使得代碼更加清晰和易于維護(hù)。

  • 模塊的單一職責(zé):userModule 是一個(gè)用戶相關(guān)功能的模塊,其中包含了創(chuàng)建、更新和刪除用戶的功能。該模塊只關(guān)注用戶相關(guān)的功能,保持了模塊的單一職責(zé)。

  • 函數(shù)的單一職責(zé):checkUsernameUnique 函數(shù)用于檢查用戶名是否唯一,validatePassword 函數(shù)用于驗(yàn)證密碼。每個(gè)函數(shù)負(fù)責(zé)一個(gè)具體的功能,使得函數(shù)的職責(zé)清晰可見(jiàn)。

通過(guò)應(yīng)用單一職責(zé)原則,可以將不同的功能分別封裝到不同的組件、模塊和函數(shù)中,使代碼更具可讀性、可維護(hù)性和重用性。這種設(shè)計(jì)方式幫助我們遵循獨(dú)立職責(zé)的原則,提高代碼的可擴(kuò)展性,并減少不必要的耦合。

3 依賴倒置原則

該原則提倡通過(guò)抽象來(lái)解耦代碼之間的依賴關(guān)系。高層模塊應(yīng)該依賴于抽象接口,而不是具體實(shí)現(xiàn)細(xì)節(jié)。這樣可以降低模塊之間的耦合度,并且使得系統(tǒng)更容易擴(kuò)展和修改,同時(shí)也更易于進(jìn)行測(cè)試。

// 不符合依賴倒置原則

class UserService {
  getUser(userId) {
    // 獲取用戶邏輯...
  }
}

class UserController {
  constructor() {
    this.userService = new UserService();
  }

  getUser(userId) {
    const user = this.userService.getUser(userId);
    // 處理用戶數(shù)據(jù)邏輯...
  }
}

// 符合依賴倒置原則

class UserService {
  getUser(userId) {
    // 獲取用戶邏輯...
  }
}

class UserController {
  constructor(userService) {
    this.userService = userService;
  }

  getUser(userId) {
    const user = this.userService.getUser(userId);
    // 處理用戶數(shù)據(jù)邏輯...
  }
}

// 使用示例

const userService = new UserService();
const userController = new UserController(userService);

userController.getUser(123);

上述示例展示了一個(gè)不符合依賴倒置原則的情況和一個(gè)符合依賴倒置原則的情況。

在不符合原則的情況下,UserController 類內(nèi)部直接創(chuàng)建了 UserService 的實(shí)例。這種硬編碼的依賴關(guān)系導(dǎo)致了緊耦合,不利于代碼的擴(kuò)展和維護(hù)。

通過(guò)采用依賴注入的方式,可以將 UserService 作為參數(shù)傳遞給 UserController 的構(gòu)造函數(shù)。這樣,UserController 不再關(guān)心具體的 UserService 實(shí)現(xiàn),而是依賴于抽象接口,降低了組件之間的耦合性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-733258.html

到了這里,關(guān)于前端設(shè)計(jì)模式和設(shè)計(jì)原則之設(shè)計(jì)原則的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Java 設(shè)計(jì)模式】設(shè)計(jì)原則之開(kāi)放封閉原則

    在軟件開(kāi)發(fā)中,設(shè)計(jì)原則是創(chuàng)建靈活、可維護(hù)和可擴(kuò)展軟件的基礎(chǔ)。 這些原則為我們提供了指導(dǎo)方針,幫助我們構(gòu)建高質(zhì)量、易理解的代碼。 ?單一職責(zé)原則(SRP) ?開(kāi)放/封閉原則(OCP) ?里氏替換原則(LSP) ?依賴倒置原則(DIP) ?接口隔離原則(ISP) ?合成/聚合復(fù)

    2024年02月02日
    瀏覽(61)
  • 設(shè)計(jì)模式——設(shè)計(jì)模式以及六大原則概述

    設(shè)計(jì)模式——設(shè)計(jì)模式以及六大原則概述

    設(shè)計(jì)模式代表有經(jīng)驗(yàn)的面向?qū)ο筌浖_(kāi)發(fā)人員使用的最佳實(shí)踐。 設(shè)計(jì)模式是軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。 這些解決方案是由許多軟件開(kāi)發(fā)人員在相當(dāng)長(zhǎng)的時(shí)間內(nèi)通過(guò)試錯(cuò)獲得的。 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四

    2024年02月13日
    瀏覽(21)
  • 設(shè)計(jì)模式的設(shè)計(jì)原則

    設(shè)計(jì)模式的設(shè)計(jì)原則

    為什么需要設(shè)計(jì)模式? 我的理解設(shè)計(jì)模式就是一種針對(duì)某種問(wèn)題的套路,是一套被反復(fù)使用,多數(shù)人所知曉的,經(jīng)過(guò)分類編目的,代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。 1.開(kāi)閉原則 1.1 定義: ????一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉,即軟件實(shí)體應(yīng)盡量在不修改原有代碼下進(jìn)行擴(kuò)展

    2024年02月09日
    瀏覽(18)
  • 設(shè)計(jì)模式-原則篇-01.開(kāi)閉原則

    設(shè)計(jì)模式-原則篇-01.開(kāi)閉原則

    ? 可以把設(shè)計(jì)模式理解為一套比較成熟并且成體系的建筑圖紙,經(jīng)過(guò)多次編碼檢驗(yàn)?zāi)壳翱磥?lái)使用效果還不錯(cuò)的軟件設(shè)計(jì)方案。適用的場(chǎng)景也比較廣泛,在使用具體的設(shè)計(jì)模式之前先要學(xué)習(xí)軟件設(shè)計(jì)的基礎(chǔ) “軟件設(shè)計(jì)原則”,后面的23個(gè)設(shè)計(jì)模式都是遵從“軟件設(shè)計(jì)原則演變而

    2024年02月09日
    瀏覽(27)
  • 軟件設(shè)計(jì)模式原則(二)開(kāi)閉原則

    軟件設(shè)計(jì)模式原則(二)開(kāi)閉原則

    繼續(xù)講解第二個(gè)重要的設(shè)計(jì)模式原則——開(kāi)閉原則~ 一.定義 ????????開(kāi)閉原則,在面向?qū)ο缶幊填I(lǐng)域中,規(guī)定“軟件中的對(duì)象(類,模塊,函數(shù)等等)應(yīng)該對(duì)于擴(kuò)展是開(kāi)放的,但是對(duì)于修改是封閉的”,這意味著一個(gè)實(shí)體是允許在不改變它的源代碼的前提下變更它的行為

    2024年02月06日
    瀏覽(19)
  • 設(shè)計(jì)模式之六大設(shè)計(jì)原則

    設(shè)計(jì)模式之六大設(shè)計(jì)原則

    學(xué)習(xí)的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統(tǒng)/深入學(xué)習(xí)某技術(shù)知識(shí)點(diǎn)… 一個(gè)人摸索學(xué)習(xí)很難堅(jiān)持,想組團(tuán)高效學(xué)習(xí)… 想寫博客但無(wú)從下手,急需寫作干貨注入能量… 熱愛(ài)寫作,愿意讓自己成為更好

    2024年02月02日
    瀏覽(20)
  • 設(shè)計(jì)模式】引言-六大設(shè)計(jì)原則

    ● 概念:僅有一個(gè)引起其變化的原因。 ● 個(gè)人理解:一個(gè)類中應(yīng)該是一組相關(guān)性很高的函數(shù)及數(shù)據(jù)的封裝 主觀性較強(qiáng),和起名一樣困難,一個(gè)方法放在ClassA合理還是放在ClassB合理? ● 概念:一個(gè)軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。即軟件實(shí)體應(yīng)盡量在不修改原有代碼

    2023年04月24日
    瀏覽(19)
  • 軟件設(shè)計(jì)原則與設(shè)計(jì)模式

    軟件設(shè)計(jì)原則與設(shè)計(jì)模式

    設(shè)計(jì)中各各原則同時(shí)兼有或沖突,不存在包含所有原則的設(shè)計(jì) 一:?jiǎn)我宦氊?zé)原則又稱單一功能原則 核心:解耦和增強(qiáng)內(nèi)聚性(高內(nèi)聚,低耦合) 描述:類被修改的幾率很大,因此應(yīng)該專注于單一的功能。如果你把多個(gè)功能放在同一個(gè)類中,功能之間就形成了關(guān)聯(lián)。 二:開(kāi)閉

    2024年02月10日
    瀏覽(17)
  • 設(shè)計(jì)原則及設(shè)計(jì)模式基礎(chǔ)

    設(shè)計(jì)原則及設(shè)計(jì)模式基礎(chǔ)

    ?設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過(guò)分類編目的代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),使用設(shè)計(jì)模式是為了可以重用代碼,讓代碼更容易被他人理解并且提高代碼的可靠性。 GoF(Gang Of Four 四人組,指4位著名軟件工程學(xué)者),在1994年歸納發(fā)表了23中在軟件開(kāi)發(fā)中使用頻率較高的

    2024年02月15日
    瀏覽(20)
  • 設(shè)計(jì)模式的六大設(shè)計(jì)原則

    一個(gè)類只負(fù)責(zé)一個(gè)單一明確的職責(zé)。如果一個(gè)類同時(shí)負(fù)責(zé)多個(gè)職責(zé),來(lái)自職責(zé)A的需求變更引起的修改可能會(huì)導(dǎo)致職責(zé)B的功能發(fā)生故障。 比如說(shuō)一個(gè)類T原本是符合單一職責(zé)的,后來(lái)因?yàn)槟撤N原因或者是需求變更了,需要將職責(zé)P細(xì)分為顆粒度更細(xì)的職責(zé)P1和職責(zé)P2,這時(shí)候可以

    2024年02月09日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包