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)。

依赖定义:  <dependency>  <groupId>com.google.guava</groupId>  <artifactId>guava</artifactId>  <version>18.0</version>  </dependency>  repo定义:  <repository>  <id>repo.default</id>  <name>Internal Release Repository</name>  <url>http://repo.xxxxxx.com/nexus/content/repositories/releases</url>  <releases>  <enabled>true</enabled>  <updatePolicy>interval:60</updatePolicy>  <checksumPolicy>warn</checksumPolicy>  </releases>  <snapshots>  <enabled>false</enabled>  <updatePolicy>always</updatePolicy>  <checksumPolicy>warn</checksumPolicy>  </snapshots>  </repository>

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

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

Maven最佳实践:管理依赖 1

4.1. 最简单的依赖 2

4.2. 依赖归类 2

4.3. 依赖范围(scope) 3

4.4. 分类器(classifer) 5

4.5. 依赖管理(dependencyManagement) 6

5. 与其他工具的区别

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

5.2. App store

6. 依赖管理工具,设计

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

Atitit 依赖管理之道 1. 概念 依赖管理,是指在什么地方以什么形式引入外部代码。 1 1.1.1. 理解模块化和依赖管理: 1 1.2. 依赖管理,有三个层面。 单一职责原则,协议对象引用,相关推荐

  1. 接口隔离原则和单一职责原则区别

    接口隔离原则和单一职责原则区别 单一职责原则是备受争议的原则,根据不同的业务逻辑,它会将系统功能模块划分成不同种类,产生多样的接口,同时每个接口尽量只包含一个功能(方法). 而产生争议的原因就是这个业 ...

  2. 三、单一职责原则、开放-封闭原则、依赖倒转原则

    一.单一职责原则 1.定义:就一个类而言,应该仅有一个引起它变化的原因. 2.为什么要?:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力 ...

  3. 大话设计模式三之单一职责原则、开放-封闭原则、依赖倒置原则、里氏代换原则

    单一职责原则 单一职责原则(SRP),意思就是说,功能要单一.准确解释是,就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或 ...

  4. 面向对象思想 常说的OOP五大原则就是指1、单一职责原则; 2、开放闭合原则; 3、里氏替换原则; 4、依赖倒置原则; 5、接口隔离原则。...

    常说的OO五大原则就是指其中的 : 1.单一职责原则: 2.开放闭合原则: 3.里氏替换原则: 4.依赖倒置原则: 5.接口隔离原则. https://blog.csdn.net/Anders_Zhu ...

  5. 设计模式 学习笔记(2)单一职责原则、开放封闭原则、依赖倒转原则

    (3)单一职责原则 单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因.例如,我们在写一个窗体应用程序,一般都会生成一个Form这样的类,于是我们就把各种各样的代码,像算法.数据库访问 ...

  6. 设计原则 单一职责原则、开放封闭原则、依赖倒置原则、里氏代换原则、迪米特法则

    目录 1 单一职责原则 2 开放封闭原则 3 依赖倒置原则 4 里氏代换原则 5 迪米特法则 1 单一职责原则 比如:电脑内存坏了就应该更换内存,不应该更换CPU (内存负责内存.CPU负责CPU) ...

  7. 设计原则(单一职责原则 开放封闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则)

    设计原则 单一职责原则(SRP) 从三大特性角度看原则: 应用的设计模式: 开放封闭原则(OCP) 从三大特性角度看原则: 应用的设计模式: 里氏替换原则(LSP) 从三大特性角度看原则: 应用的设计 ...

  8. 第三篇:设计模式六大原则: 一个萝卜一个坑 -- 单一职责原则

    形形色色的代码接触多了,越发意识到 面向对象 这个被人说烂却鲜有用好的概念的重要性.之前看了<大话设计模式>也只是匆匆一瞥,没有敲代码或者记博客,这次连着<Android 源码设计模 ...

  9. 软件架构-单一职责原则

    单一职责原则(Single Pesponsibility Principle, SRP)是SOLID五大设计原则最容易被误解的一个.也许是名字的原因,很多程序员根据SRP这个名字想当然地认为这个原则是 ...

  10. 单一职责原则(SRP)

    单一职责原则(Single Pesponsibility Principle, SRP) 单一职责有两个含义: 一个是避免相同的职责分散到不同的类中, 别一个是避免一个类承担太多职责 为什么要遵守SR ...

最新文章

  1. vc richedit 指定光标位置_机械图纸·每日一符:位置度
  2. 学生籍贯信息管理系统c语言,学生籍贯信息管理系统(c).doc
  3. Ubuntu13.10:[3]如何开启SSH SERVER服务
  4. java之spring mvc之初始spring mvc
  5. tokengetall php,token_get_all Split given source into PHP tokens php函数分享
  6. NODE安装N管理出错
  7. java 按回车键查询
  8. 机器学习中的算法:决策树模型组合之GBDT(Gradient Boost Decision Tree)
  9. 1、Java开发环境搭建(eclipse版)
  10. 游戏角色开始动起来了,真帅!【python 游戏实战 03】
  11. HTML中嵌入视频和音频代码
  12. 戴尔linux恢复镜像,如何从官网下载并使用系统恢复映像
  13. spring security面试
  14. 团队项目--“我爱淘”校园二手书店 NABC分析
  15. BZOJ 3786: 星系探索 ETT
  16. 通俗易懂:什么是.NET?.NET Framework?.NET Core?(比较全面)
  17. 弘扬岭南画派爱国精神,广州市海珠区文博管理中心等联袂举办爱国名画进校园
  18. wireshark网络分析器的学习使用
  19. wireshark 笔记
  20. 集成声网(Agora)SDK踩坑集锦系列

热门文章

  1. 基于MATLAB的窗函数滤波器设计,基于matlab的FIR滤波器窗函数设计
  2. Bootstrap (remote)事件监听多次
  3. LVS-Fullnat之编译内核 将fullnat模块添加到内核
  4. android NDK安装
  5. Java 处理 XML 的三种主流技术及介绍
  6. sqlserver express版PRIMARY 大小不能超过4G
  7. OO第四单元UML作业总结暨OO课程总结
  8. Python 中的 __str__ 与 __repr__ 到底有什么差别
  9. WPF MVVM 架构 Step By Step(4)(添加bindings - 完全去掉后台代码)
  10. 你如何才能成为10倍速的程序员