电脑和手机都能浏览的网站开发网站开发后端需要哪些技术

news/2025/9/29 14:05:38/文章来源:
电脑和手机都能浏览的网站开发,网站开发后端需要哪些技术,wordpress管理员登录,图片上传 网站建设教学视频教程来源 | 扔物线责编 | Carol文章开始之前#xff0c;首先来看个视频#xff1a;开始说到依赖注入#xff0c;做 Android 的人都会想到一个库#xff1a;Dagger#xff1b;说到 Dagger#xff0c;大家的反应普遍是一套三连#xff1a;牛逼、高端、我才不用。又牛逼又高端首先来看个视频开始说到依赖注入做 Android 的人都会想到一个库Dagger说到 Dagger大家的反应普遍是一套三连牛逼、高端、我才不用。又牛逼又高端为什么不用因为太难了。是吧又难学又难用。大多数的人在学习 Dagger 的路上就被直接劝退了剩下的这一小撮人最终排除万难学会并且用上了 Dagger但多半都是用着用着就掉进了自己亲手用 Dagger 搭建的迷宫里怎么也绕不清楚而且越陷越深就这么成年累月地被它折磨。有人可能会说难用就别用呗拆出来啊。拆哼哼。你对 Dagger 一无所知。而就在上个月Android 团队又在 Jetpack 里面又增加了一个新的依赖注入库Hilt。这个 Hilt 是专门针对于 Android 平台的依赖注入库它是基于 Dagger 的。啊基于……Dagger这次到底是真正的神器到来还是又一个大坑依赖注入是什么Dagger 的名字取自有向无环图 DAG (directed acyclic graph)因为程序里的依赖关系拼接起来就是一个或者多个有向无环图DAG-erDagger取了个谐音Dagger 是匕首的意思。而这次的 Hilt 是刀柄的意思匕首很难用是吧来给你个柄。说得很好听到底有没有那么好用啊这是个复杂的问题且听我慢慢道来~依赖注入有什么用Hilt 好不好用我们先来看看它是个什么。它是个用注解来进行配置的依赖注入库。注解是它的写法首先它是个依赖注入库对吧什么是依赖注入一个类里有两个变量这两个变量就是它的依赖要初始化一个依赖有两种方法第一你这个类自己初始化第二让外部帮你初始化。其中这第二种让外部帮你初始化你的依赖就叫依赖注入。关键在于初始化是谁做的至于最后一步是你把结果拿过来还是说你连拿都不用拿最后一步的赋值工作也让外部来帮你做了这都不重要只要初始化工作是外部做的就都叫依赖注入。所以 Factory 的使用是依赖注入吗是的。Builder也是。带参数的构造函数也是这些都属于由外部来提供依赖的初始化所以都是依赖注入并不是非要像 Dagger 那样使用注解的像魔法一样的才叫依赖注入。也就是说其实我们每个人都已经在使用依赖注入了。虽然很多人在面对 Dagger 的时候会问「依赖注入到底有什么用」但其实 Dagger 并不是提供了依赖注入的能力而是为依赖注入提供了一种更简单的方式。依赖注入本来就是有用的这个问题不想明白不管是 Dagger 还是现在的 Hilt你都用不好。Dagger 让我们可以用注解的方式来配置依赖关系让依赖注入变得更方便。不过由于功能复杂导致它的上手非常困难再加上刚才我说的很多人对于依赖注入的作用以及 Dagger 的定位都没搞清楚这两个原因加起来就导致很多人还没学会 Dagger 就把它弃了让 Dagger 成为 Android 史上最受冷落的优质库。这样的结果不论是对 Dagger 还是对我们都是很可惜的。而 Hilt 的出现就直接解决了 Dagger 太复杂的这个问题。Hilt 怎么帮助我们进行依赖注入Hilt 是 Google 专门针对 Android 平台做的一个依赖注入库。它不是从里到外全新开发的而是基于 Dagger 做的它的下层还是 Dagger。为什么不直接去优化改进 Dagger而要基于它做一个新库呢因为 Hilt 做的事其实也并不是对 Dagger 进行优化而是场景化针对 Android 开发制定了一系列的规则通过这些规则大大简化了这套工具的使用。例如在 Dagger 里你要对某个类的依赖进行注入你需要手动获取依赖图和执行注入依赖操作而在 Hilt 里注入会自动完成因为 Hilt 会自动找到 Android 的系统组件里面那些最佳的初始化位置——比如 Activity 的 onCreate() ——然后在这些位置注入依赖。所以为什么不是去优化 Dagger而是做了个新库因为 Hilt 本身并不是一种优化而是场景化或者说它是一种针对场景的优化。总之它是不通用的只能给 Android 用所以不能放在 Dagger 里。有点明白了吧那它具体怎么用呢大概是这样的我们程序里有些对象是全局共享的比如线程池或者 Retrofit 对象这种东西我们通常会把它放在 Application 对象里或者做成单例的而如果用 Hilt你也可以把它做成自动注入的依赖还有些对象是局部共享的比如某个 Activity 会把一些显示用的数据共享给它内部的一些 View 和 Fragment。这一类情况我们的做法通常是获取外部 Activity 对象然后强转再去拿它内部的对象而如果用 Hilt你可以把这个对象直接声明出来让它自动注入这不只是一个「美观」的差别依赖注入可以让你的程序更加灵活比如如果你的 View 可以在多个不同的 Activity 里显示那你在 View 里面要怎么强转你要转成谁很麻烦是吧而如果用依赖注入这些就都是自动的。除了共享的对象不共享的也可以用依赖注入的方式来进行初始化因为依赖注入的作用除了对共享对象提供一致性支持也可以让我们在创建任何对象的时候省一些思考和力气Inject newUser: User总之如果一个组件可能会被被共享或者不会被共享但可能会在多处使用你都可以使用 Hilt 来把它配置成依赖注入的加载方式。加载的方式可以选择直接调用构造函数或者指定子类或实现类或者干脆给出具体的代码加载的作用域可以选择默认的每次都初始化也可以设置成全局单例的也可以设置成针对任何 Activity、Fragment、View 或者 ViewModel 的局部共享简单又强大好用又灵活。具体的写法你可以去看文档或者过段时间我会有一次公开课到时候也会提前通知大家。到这里有的人可能会分个叉可能会想诶 ButterKnife 或者现在 Jetpack 推出的 ViewBinding 它们提供的功能Hilt 提供了吗因为如果提供了我在用了 Hilt 之后不就可以把 ButterKnife 和 ViewBinding 扔掉了不好意思Hilt 不提供它们的功能。Hilt 和 Dagger 虽然用法和 ButterKnife 很像都是给变量加注解然后变量会自动赋值但它们的功能定位是不一样的Hilt 和 Dagger 是做依赖注入的而 ButterKnife 和 ViewBinding 是做视图绑定的。这可不是个文字游戏依赖注入和视图绑定是有本质区别的依赖注入是由外部对对象进行初始化也就是所谓的控制翻转而视图绑定是让变量去指向一个已经有了的 View它的依赖依然是由依赖持有者自己决定的这是一个本质的区别。Dagger 为什么难用这么看来Hilt 还是很好用的是吧那有些人就又有问题了哎Hilt 这么好用那Dagger 真的难用吗到底难用在哪了其实说白了Dagger 的难用主要在于这个框架太强大和灵活了导致你要遵守很多约定才能正确使用它。比如在 Hilt 里一个注解就能让 Activity 内部的依赖自动被注入而 Dagger 需要手动注入再比如在 Hilt 里如果你想让一个对象只在 Activity 内部被共享而不是全局共享也就是一个注解能解决的问题而在 Dagger 里面你需要先去创建一个自定义的注解。这些难吗每个都不难的对吧但把它们放在一起让你灵活搭配使用就有点难了。另外Dagger 被大家普遍认为难的另一个原因刚才我也说过了很多人连依赖注入都不太懂的。所以我再说一遍如果一个组件可能被共享或者可能在多处被使用你可以使用依赖注入来初始化它。然后在需要依赖注入的场景里使用 Dagger 能让你的依赖注入写起来更简单。最后Hilt 进一步简化了这个事情。先知道它是什么再去用它。总结 所以今天表面上是在介绍 Hilt其实是对于 Hilt 以及它背后的依赖注入机制进行一个整体的讲解希望对你可以有帮助。大家学知识和技术的时候一定不要只关注表面要透过表面看到里面的本质掌握最核心的东西。那么回到这期的标题——《从 Dagger 到 Hilt谷歌为何执着于让我们用依赖注入》为什么其实谷歌并没有非要让我们使用依赖注入而是我们本来就需要使用依赖注入谷歌只是想提供一种更方便的方式让我们去使用依赖注入而已。Dagger 很强大但太难学从而导致太难用而 Hilt 彻底扫除了这个障碍那……要不咱给它个机会更多阅读推荐闲鱼的云原生故事靠什么支撑起万亿的交易规模野鸡大学怎么知道考生电话的达摩院NLP团队斩获六项世界冠军背后让AI没有难懂的语言我把这篇文章给女朋友看她终于明白什么是「数据中台」了云交易所已成资金盘、杀猪盘重灾区曾被寄予厚望如今罪恶丛生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商丘做网站的公司肇庆企业做网站

点击上方蓝字关注我们!因为分享,我们相遇在SEO路上“网站上线一段时间了,为什么没有流量?为什么没有询盘?”对于做网络营销的企业而言,网站流量与询盘是建立网站的根本目的,可是为什么操作了一段…

网站后台信息发布这样做网站开发工具介绍

455.分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有…

手机怎么做网站添加背景音乐chrome手机版

.net famework3.5中新增加了一个关于时区的静态类,可以使得我们方便的操作与时区相关的信息 下面的内容是摘自MSDN的信息,注意:这个类是Beta2中的类,至于Release后是否改变还不知道。由于电脑中没有安装英文正式版的MSDN,所以只能…

专业网站建站费用百度竞价防软件点击软件

ListViewTimer列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)项目中有时会遇到列表中含有倒计时或者是计时器的需求,实现的方式有很多种,此Demo中是使用Thread Handler实时的对item的局部进行刷新达到计时或倒计时的功能本项目中实现的是计…

龙岗商城网站建设哪家便宜品牌网站建设 app建设

问候! :) 离开几个月后,我决定恢复风格:)。 我注意到我以前有关新的Date / Time API的一篇文章非常受欢迎,因此这次我将把本篇文章专门介绍Java 8的另一个新功能: Lambda Expressions 。 功能编程 Lambda表达式是Java编程语言最…

安州区建设局网站网页给别人做的 网站后续收费吗

由麦克斯韦方程组推出均匀平面电磁波及其特征 均匀平面电磁波是指在传输方向垂直与传输方向垂直的平面上,电磁波的每一点的电场和磁场都相同,这种电磁波被称作均匀平面电磁波。 研究任何一种物理现象,当一种物理现象特别复杂的时候&#xf…

做网站推广弊端医疗器械网站备案前置审批事例

一、停更不停用 现在 SpringCloud 不再修复 bug,也不再接收合并请求,也不再发布新版本,但是目前还是可以继续使用的。 二、以前的组件 以前 SpringCloud 常用的组件如下图,服务的注册和发现使用 Eureka,服务的负载和调…

同一个ip的网站做链接有用资讯网站优化排名

Ubuntu在打包过程请自行检索其它文章; 在打包时候默认不能打包一些静态资源的,比如以配置文件为例config目录 当程序打包安装后,安装目录中没有config目录,这时候就需要我们手动创建config目录及目录中对应的配置文件等内容&…

TDS文件搜索_Winform版本与avalonia开发差异比较: (二) 列表虚拟化的实现-百万数据轻松展示

TDS文件搜索_Winform版本与avalonia开发差异比较: (二) 列表虚拟化的实现-百万数据轻松展示一、列表虚拟化与海量数据展示 在tds中,当用户在关键词后加了/a参数,会列出所有的文件。此时可能会有上百万个。为了流畅操…

网站开发合同及报价网站素材站

List接口: 允许元素重复,记录先后添加顺序. Set接口: 不允许元素重复,不记录先后添加顺序. 需求: 不允许元素重复,但是需要保证先后添加的顺序. LinkedHashSet:底层才有哈希表和链表算法. 哈希表:来保证唯一性,.此时就是HashSet,在哈希表中元素没有先后顺序. 链表: 来记录…

光影绘新疆:解锁城市旅游宣传片拍摄全攻略 - 指南

光影绘新疆:解锁城市旅游宣传片拍摄全攻略 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

厦门网站开发网站建设网站深圳响应式设计企业网站

缩写 ARR: Auto-Reload Register(保存定时器的计数范围) PSC: Prescaler register(预分频器寄存器,根据设置的分频因子N,计数N个定时器时钟脉冲后,产生一个CNT计数,以此实现分频功能&#xff0…

手机网站建设的教程视频教程服务企业是什么

由于系统运行时间比较长,没有对用户的身份证号、邮箱、手机号进行脱敏处理,后期对数据进行了编码。 更新表数据 sql UPDATE sys_staff SET MOBIL_PHONE CASEWHEN MOBIL_PHONE IS NULL THEN ELSE utl_raw.cast_to_varchar2(utl_encode.base64_encode(ut…

深入解析:lx238res.dll lmpclres.dll lmoptra.dll lmikjres.dll lexutil.dll kyrares.dll kyores.dll

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Vue电商数据分析大屏开发 - 教程

Vue电商数据分析大屏开发 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

谢家华做网站石家庄网站建设套

rtsp h265 转 rtmp,首先要对rtmp协议做扩展,目前国内已有相应扩展标准,国内开发者基本上都按这个扩展协议做的。协议层问题已解决。剩下关键问题是要实现rtmp h265推送模块, 支持rtmp h265 的server, rtmp h265播放模块。 rtmp h…

包装产品做网站做自媒体网站需要注册什么公司

本文主要介绍在Node.js中使用MongoDB连接数据库、创建集合的方法。 目录 连接数据库使用原生驱动程序连接MongoDB数据库使用Mongoose连接MongoDB数据库 创建集合使用mongodb驱动程序 连接数据库 在Node.js中使用MongoDB连接数据库有两种方式:使用原生驱动程序和使用…

企业为什么要做网站建设品牌策划案模板

区别 QDir类的mkdir()和mkpath()方法都用于创建目录,但它们在处理多层目录的创建时有所不同。 mkdir()方法:它用于创建一个目录。如果要创建的目录的父目录不存在,则mkdir()方法会失败,不会创建任何目录。mkpath()方法&#xff…

标签化模板之styled-components原理

const name = "zs" const age = 18 const str = tag`my name is ${name}, age ${age}` function tag(strings, values) {console.log(strings, values) }