dart系列之:手写Library,Library编写最佳实践

简介: 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编写最佳实践。

相关文章
|
缓存 网络协议 算法
计算机网络常见面试题目总结,含答案
计算机网络常见面试题目总结,含答案
|
9月前
|
人工智能 运维 安全
重塑高校计算机实验室:从硬件到开源应用聚合与托管平台的转型
高校计算机实验室面临环境碎片化、资源分配失衡及安全管控难题。WebSoft9提出四维重构框架,从硬件层融合异构资源、应用层聚合开源工具链、运维层实现智能管理到教学科研协同优化,助力实验室转型。通过AI教学与跨校区协作等实战案例,展示其高效解决方案。建议分阶段实施,先搭建基础平台再逐步扩展功能,同时注重权限分级与混合云备份以规避风险。
393 0
重塑高校计算机实验室:从硬件到开源应用聚合与托管平台的转型
|
Python
Python 中的关键字是什么?
【8月更文挑战第29天】
834 8
|
监控 安全 网络安全
防火墙和入侵检测系统
【8月更文挑战第16天】
793 1
|
前端开发 Python
前后端分离的进化:Python Web项目中的WebSocket实时通信解决方案
【7月更文挑战第18天】在Python的Flask框架中,结合Flask-SocketIO库可轻松实现WebSocket实时通信,促进前后端分离项目中的高效交互。示例展示了一个简单的聊天应用:Flask路由渲染HTML,客户端通过Socket.IO库连接服务器,发送消息并监听广播。此方法支持多种实时通信协议,适应不同环境,提供流畅的实时体验。
406 3
|
人工智能 算法 计算机视觉
无论真实还是AI视频,摩斯卡都能重建恢复4D动态可渲染场景
【6月更文挑战第30天】摩斯卡系统革命性地从单视角视频重建4D动态场景,融合2D视觉模型与物理优化,实现渲染。利用“Motion Scaffold”表示几何、外观和运动,即使在多视角输入困难时也能保证高质量重建与渲染。虽有输入质量和计算资源限制,但其创新性提升了动态场景处理的实用性和可控性。[arXiv:2405.17421](https://arxiv.org/pdf/2405.17421)
257 2
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的宠物领养系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的宠物领养系统的详细设计和实现(源码+lw+部署文档+讲解等)
266 0
|
人工智能 机器人 API
ChatGPT4.0直接出图功能上线!神奇一键画,新手小白也能绘画(chatgpt4.0直接出圖)
ChatGPT4.0直接出图功能上线!神奇一键画,新手小白也能绘画(chatgpt4.0直接出圖)
1136 2
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A-CTF攻击与防御
模块C和D是CTF夺旗比赛,分别聚焦攻击和防御。攻击者需利用各种漏洞(如命令注入、文件上传、远程代码执行等)攻陷靶机,获取权限,但禁止攻击裁判服务器。防御者则需检测并加固堡垒服务器,确保服务可用性,发现并修补同样类型的漏洞。比赛分数依据靶机的flag值和加固报告,强调不提供补时。操作环境涉及Windows和Linux,选手需使用谷歌浏览器登录。注意提交清晰的截图和PDF报告至U盘。
404 0
|
存储 安全 区块链
探索Web 3.0:构建去中心化应用的实践指南
在本篇文章中,我们将深入探讨Web 3.0的核心概念及其对未来互联网发展的影响。通过引导读者了解去中心化技术的基础,本文旨在提供一个实践指南,帮助开发者构建自己的去中心化应用(DApps)。我们将从介绍区块链、智能合约的基础知识出发,逐步深入到如何利用现有框架和工具(如Ethereum、IPFS等)开发DApps的详细步骤。此外,文章还将探讨Web 3.0技术在数据安全、用户隐私以及去中心化金融(DeFi)等领域的应用前景,旨在为开发者提供一份全面、实用的参考资料,助力他们在去中心化互联网时代占据先机。