当前位置:首页 > > 充电吧
[导读]Atitit  依赖管理之道1. 概念 依赖管理,是指在什么地方以什么形式引入外部代码。 11.1.1. 理解模块化和依赖管理: 11.2. 依赖管理,有三个层面。 单一职责原则,协议对象引用,依赖逻

Atitit  依赖管理之道

1. 概念 依赖管理,是指在什么地方以什么形式引入外部代码。 1

1.1.1. 理解模块化和依赖管理: 1

1.2. 依赖管理,有三个层面。 单一职责原则,协议对象引用,依赖逻辑关系 2

2. 五大数据解耦 视图、数据模型、网络请求、本地存储、页面跳转五块代码 2

3. Maven 2

4. Maven最佳实践:管理依赖 1 3

4.1. 最简单的依赖 2 4

4.2. 依赖归类 2 4

4.3. 依赖范围(scope) 3 4

4.4. 分类器(classifer) 5 4

4.5. 依赖管理(dependencyManagement) 6 4

5. 与其他工具的区别 4

5.1. Ruby的gem,Node的npm,Python的pip,iOS的CocoaPods都类似,只是配置文件语法和坐标命名规则有些差异。 4

5.2. App store 4

6. 依赖管理工具,设计 4

7. 组合层次 fun》jobj,pkg,namespae,modu 5

8. 参考资料 5

 

1. 概念 依赖管理,是指在什么地方以什么形式引入外部代码。

 

依赖管理为什么重要呢? 因为,依赖在哪里,处理代码就会那里,而bug也就会出现在那里。 于是,反过来,为了让bug集中,就需要让处理代码集中,也就需要管理好代码的依赖关系。

1.1.1. 理解模块化和依赖管理:

· 应用一般都会依赖外部库(jQuery和AngularJs),这些库应该使用包管理器处理和更新,而不是手动下载。

· 应用本身也可以分解成为多个相互交互的小部分,学习封装代码的技能,把代码视作自成一体的组件,学习如何设计优秀的接口,如何安排接口;学习如何隐藏数据,只开放用户需要的部分。

· 如何解析依赖,避免手动维护一组有序的script标签。

 

1.1. 依赖管理,有三个层面。 单一职责原则,协议对象引用,依赖逻辑关系

1、相同的代码,只出现在一个地方,也叫单一职责原则。

2、通过引用协议对象,让依赖关系中的组件更容易更换。

3、从逻辑上安排依赖关系,让依赖关系更容易被人理解。

单一职责原则,是最基本的原则。它是代码模块化,设计模式的根本。

协议对象引用,使得功能变更时,只需要在一个统一的地方做最少的修改。

依赖逻辑关系,则主要是为了更方便人脑去理解代码之间的关系。

 

2. 五大数据解耦 视图、数据模型、网络请求、本地存储、页面跳转五块代码

 

3. Maven

Atitit maven使用总结attilax总结.docx

atitit 项目管理  package 模块管理 maven attilax总结.docx

 

Maven诞生于2004年(来源维基),查询了下,应该是各语言的依赖管理工具中早的。Ruby的gem也是2004年出现的,但gem离完备的依赖管理工具还差些,直到Ruby的bundler出现。Python的pip出现的更晚。

Maven的习惯是通过 groupID(一般是组织的域名倒写,遵循Java package的命名习惯)+ artifactId(库本身的名称) + version(版本)来定义坐标,通过xml来做配置文件,提供了中心仓库(repo.maven.org)以及本地工具(mvn)。

依赖定义:    repo定义:   

同时,为了避免依赖冲突的问题,Maven的依赖配置提供了exclude配置机制,用于阻断部分库的传递依赖。

 

 

4. Maven最佳实践:管理依赖 1

Maven最佳实践:管理依赖 1

4.1. 最简单的依赖 24.2. 依赖归类 24.3. 依赖范围(scope) 34.4. 分类器(classifer) 54.5. 依赖管理(dependencyManagement) 65. 与其他工具的区别5.1. Ruby的gem,Node的npm,Python的pip,iOS的CocoaPods都类似,只是配置文件语法和坐标命名规则有些差异。5.2. App store6. 依赖管理工具,设计

1.要有一种依赖库的命名规则,或者叫坐标(Coordinates)的定义规则,可以通过坐标准确找到依赖的库。

2.要有对应的配置文件规则,来描述和定义依赖。

3.要有中心仓库保存这些依赖库,以及依赖库的元数据(metadata),供使用方拉取。

4.还需要一个本地工具去解析这个配置文件,实现依赖的拉取。

以上其实就是各依赖管理工具的核心要素。

 

7. 组合层次 fun》jobj,pkg,namespae,modu

function用于组合代码块逻辑,有了object用于组合一组方法,有了package,namespace用于组合一组相关对象,但其实还需要有更高一个层次的组合定义 —– module,或者叫子项目

 

8. 可选择性依赖

的另一个原因,是Android 框架已经提供了一种解决方案,但是某个外部库提供的解决方案性能更好。如果用户本就依赖于该外部库,或者愿意增加方法数量以获得更好的性能,就可以添加可选择性依赖。

我最近看到的PlacesAutocompleteTextView库,就属于这种情况。该库使用的内部 HTTP 客户端,既可以是 OkHttpClient,也可以是 HttpURLConnection。通常,前者的性能更好,但是需要添加 OkHttp 作为依赖。 如果用户不想包含该依赖,可以自动从标准库回退到 HttpURLConnection。

该类被加载时,会检查 OkHttpClient 的完全限定类名是否可用。如果抛出 ClassNotFoundException,我们就知道用户没有添加 OkHttp,于是回退到 HttpURLConnection。PlacesHttpClient 是包装以上两种实现方式的公共接口,因此在整个代码库中,这两种实现方式可以交换使用。JSON 解析也采用了同样的方法,Gson 可选择性地作为依赖包含在库中。

如果性能表现与库的大小之间的权衡系数很大,这个方法确实不错。但是,如果回退的实现方式比较困难(比如 JSON 解析就是这种情况),笔者建议你先使用外部库来节省时间,在后续的版本中再考虑添加回退实现。

 

9. 参考资料

漫谈依赖管理工具:从Maven,Gradle到Go_TechWeb.mhtml

漫谈依赖管理工具:从Maven,Gradle到Go_TechWeb.mhtml

Maven最佳实践:管理依赖 - 飞龙在天001 - 博客园.mhtml

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭