dart系列之:手写Library,Library编写最佳实践
简介
Library是dart用来组织代码的一种非常有用的方式,通过定义不同的Library,可以将非常有用的dart代码进行封装,从而提供给其他的项目使用。虽然我们可以自由使用import或者export来对library进行导入和导入。但是什么样的用法才是最合适的用法呢? 一起来看看吧。
使用part和part of
虽然很多程序员讨厌使用part,但是dart确实提供了part这种功能用来将一个大的lib拆分成多个小的文件。
没错,和part的中文含义一样,part就是将lib文件进行拆分用的。
part of表示当前文件是另外一个主文件的一部分。part表示主文件是由引用的文件组成的。
我们举个例子,假如现在有三个文件student_age.dart,student_name.dart和student.dart.
其中前面两个文件是后面一个文件的组成部分。
student_age.dart:
part of student;
int getAge(){
return 18;
}
student_name.dart:
part of student;
String getName(){
return "jack";
}
student.dart:
library student;
part 'some/other/student_age.dart';
part 'some/other/student_name.dart';
上面的代码有什么问题呢?
上面代码的问题在于对于student_age.dart来说,里面的part of只是指定了所属的library,但是我们读起来会一头雾水,因为不知道具体的library到底在什么地方。
所以应该这样写:
part of '../../student.dart';
src中的文件
默认情况下lib目录下的src文件只是package内部使用的,不允许被外部的项目所调用。
所以我们一定不要直接引入lib包中的src文件。
package中的lib文件
对于package来说,lib中的文件是可以被导出的文件,但是我们在引入package的时候最好不要使用绝对路径或者相对路径直接导入lib中的文件。
而是需要使用import 'package:'.
举个例子,假如我们有下面结构的library文件:
my_package
└─ lib
└─ api.dart
test
└─ api_test.dart
api.dart就是我们要导出的文件。如果我们在api_test.dart中需要引用api.dart,则可以有下面两种方式:
import 'package:my_package/api.dart';
和:
import '../lib/api.dart';
其中上面一种方式是官方推荐的方式,为什么不使用下面一种方式呢?这是因为相对路径的方式只能在包内部使用。并且dart官方不建议将lib放在引用路径中,如果要引用lib内部的文件, 一定要使用package:。
当然,如果是package内部的引用,则优先使用相对路径,比如:
my_package
└─ lib
├─ src
│ └─ stuff.dart
│ └─ utils.dart
└─ api.dart
test
│─ api_test.dart
└─ test_utils.dart
那么对应lib/api.dart来说,可以这样引用:
import 'src/stuff.dart';
import 'src/utils.dart';
对于utils.dart来说,可以这样引用:
import '../api.dart';
import 'stuff.dart';
对于test/api_test.dart来说,可以这样引用:
import 'package:my_package/api.dart';
import 'test_utils.dart';
总之,不要在import的路径中出现lib。
总结
以上就是dart中Library编写最佳实践。
本文已收录于 http://www.flydean.com/28-dart-libraries-effective/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
dart系列之:手写Library,Library编写最佳实践的更多相关文章
- Spring系列之手写一个SpringMVC
目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 Spring系列之AOP的原理及手动实现 Spring系列之手写注解与配置文件的解析 引言 在前面的几个章节中我 ...
- Spring系列之手写注解与配置文件的解析
目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 Spring系列之AOP的原理及手动实现 引入 在前面我们已经完成了IOC,DI,AOP的实现,基本的功能都已经 ...
- 【PaddlePaddle系列】手写数字识别
最近百度为了推广自家编写对深度学习框架PaddlePaddle不断推出各种比赛.百度声称PaddlePaddle是一个“易学.易用”的开源深度学习框架,然而网上的资料少之又少.虽然百度很用心地提供 ...
- 【Spring系列】- 手写模拟Spring框架
简单模拟Spring 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 前言 上次已经学习了 ...
- 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 夯实Java基础系列15:Java注解简介和最佳实践
Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...
- Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 讯飞科大 语音云.docx \Atitit 代码托管与虚拟主机.docx \Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx \Atitit 几大研发体系对比 Stage-Gat
Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 ...
- Istio最佳实践系列:如何实现方法级调用跟踪?
赵化冰,腾讯云高级工程师,Istio Member,ServiceMesher 管理委员,Istio 项目贡献者,热衷于开源.网络和云计算.目前主要从事服务网格的开源和研发工作. 引言 TCM(Ten ...
- 手写 Vue 系列 之 从 Vue1 升级到 Vue2
前言 上一篇文章 手写 Vue 系列 之 Vue1.x 带大家从零开始实现了 Vue1 的核心原理,包括如下功能: 数据响应式拦截 普通对象 数组 数据响应式更新 依赖收集 Dep Watcher 编 ...
随机推荐
- Mysql配置文件 基本设置
[mysqld] #MySQL启动用户 user = mysql #设置mysql的安装目录 basedir=/usr/local/mysql #mysql.sock存放目录 socket=/var/ ...
- Mysql原有环境部署多个版本
目录 一.环境准备 二.下载安装包 三.Mysql-5.7单独部署 四.启动Mysql-5.7 五.muliti使用 一.环境准备 原先已经有一个5.6版本的数据库在运行了,当前操作是完全不影响原数据 ...
- [BUUCTF]PWN——gyctf_2020_borrowstack
gyctf_2020_borrowstack 附件 步骤: 例行检查,64位程序,开启NX保护 本地运行一下程序,看看大概的情况 64位ida载入,直接从main函数开始看程序, buf可以溢出0x1 ...
- 使用批处理文件(.bat)启动多个CMD窗口并执行命令
由于每次启动本机的kafka都需要打开2个cmd窗口,分别启动zookeeper服务和kafka服务,操作相对繁琐,于是想起了批处理来帮忙一键启动. 在桌面新建一个txt文件,改后缀名为.bat,并加 ...
- CF984B Minesweeper 题解
Content 有一个 \(n\times m\) 的扫雷地图,请判断这个地图是否合法,即对于所有格子,是否满足: 对应点的数字周围必须有对应数字个雷 空的地方周围没有雷 数据范围:\(1\leqsl ...
- JAVA获取当前日期的下周一到下周日的所有日期集合
/** * 获取当前日期的下周一到下周日的所有日期集合 * @return */ public static List getNextWeekDateList(){ Calendar cal1 = C ...
- 【LeetCode】1461. 检查一个字符串是否包含所有长度为 K 的二进制子串 Check If a String Contains All Binary Codes of Size K
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 统计长度为 K 的子串个数 日期 题目地址:https ...
- 【LeetCode】999. Available Captures for Rook 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力遍历 日期 题目地址:https://leetc ...
- 【九度OJ】题目1073:杨辉三角形 解题报告
[九度OJ]题目1073:杨辉三角形 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1073 题目描述: 输入n值,使用递归函数,求杨 ...
- MySQL 中的各种锁机制
行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁. 行级锁能大大减少数据库操作的冲突.其加锁粒度最小,但加锁的开销也最大.行级锁分为共享锁和排他锁. 特点 开销大,加锁 ...