IOC技術在前端專案中的應用

itread01 2021-01-23 23:24:33
前端 Ioc itread01 在前


[TOC]## 背景前端發展至今已經過去30餘年,前端應用領域在不斷壯大的過程中,也變得越來越複雜,隨著程式碼行數和專案需求的增加,內部模組間的依賴可能也會隨之越來越複雜,模組間的 **低複用性** 導致應用 **難以維護**,不過我們可以藉助計算機領域的一些優秀的程式設計理念來一定程度上解決這些問題,接下來要講述的 `IoC` 就是其中之一。## 什麼是IOC其實學過java的就一定會知道java中有一個非常著名的框架叫做**springboot**,它就是將AOP和IOC等概念運用到了極致的代表作,那麼具體IOC是做什麼的呢,我們可以看下下面一段描述。`IoC` 的全稱叫做 `Inversion of Control`,可翻譯為為「**控制反轉**」或「**依賴倒置**」,它主要包含了三個準則:1. 高層次的模組不應該依賴於低層次的模組,它們都應該依賴於抽象2. 抽象不應該依賴於具體實現,具體實現應該依賴於抽象3. **面向介面程式設計** 而不要面向實現程式設計假設我們有一個類`Human`,要例項一個`Human`,我們需要例項一個類`Clothes`。而例項化衣服`Clothes`,我們又需要例項化布`Cloth`,例項化鈕釦等等。當需求達到一定複雜的程度時,我們不能為了一個人穿衣服去從布從鈕釦開始從頭實現,最好能把所有的需求放到一個工廠或者是倉庫,我們需要什麼直接從工廠的倉庫裡面直接拿。這個時候就需要依賴注入了,我們實現一個IOC容器(倉庫),然後需要衣服就從倉庫裡面直接拿例項好的衣服給人作為屬性穿上去。這也就大大減少了我們編碼的成本。## 如何實現一個IOC其實實現IOC的思路很簡單,或者說這是一個很輕的東西,任何人只要知道原理都能去實現它。首先我們重複下剛剛所描述的ioc的概念,在正常情況下我們需要Human,Clothes類的時候都只能一個一個新建。```jsexport class Human {}export class Clothes {}function test() { const human = new Human(); const clothes = new Clothes();}```我們不難看出少量的物件需要新建的時候這麼做確實沒啥問題,但是如果在一個龐大系統中存在上百上千個物件,我們在不同業務場景又需要load不同的物件,同時我們還需要控制物件銷燬避免GC。這樣來說我們想要處理好前端物件我們得做很多工作,這樣我們就引出了接下來我們需要做的工作如何去管理物件。 ### 第一步:實現一個容器容器其實是一個高大上的概念,其實簡單來說就是個Map物件之類的東西,用於存放現有的物件。下面是我具體實現的一個小demo,主要是存放的容器類。為了保證容器唯一,所以我將其設計成了單例模式。```tsxexport class SimpleContainer { private containerMap =
版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
https://www.itread01.com/content/1611412285.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云