从零开始的鸿蒙之路:6个月实战打造开发者工具箱的成长复盘

58 阅读26分钟

从鸿蒙小白到独立开发上架应用,这6个月我踩过的坑、学到的技术、总结的经验,希望能给你一些参考

开篇:为什么选择学习鸿蒙

说实话,我接触鸿蒙是从2024年初开始的,当时完全是个新手。

之前一直做Android开发,但总觉得Android生态太成熟了,想找点新的方向。正好那段时间鸿蒙NEXT开始预热,我就想,要不试试?

刚开始心里其实挺没底的,毕竟是全新的技术栈。但后来想想,既然要学,不如边学边做个项目,这样印象更深刻。于是就有了后来那个开发者工具箱的想法。

这篇文章,我想完整复盘一下这6个月的学习历程,包括我的学习路线、踩过的坑、以及一些实用的经验。希望能给想学鸿蒙的朋友一些参考。

第一阶段:入门摸索(第1-2周)

我的学习路径

一开始完全不知道从哪里学起,在网上搜了一圈,最后确定了这个路线:

1、官方文档是第一手资料:先把HarmonyOS官方文档过了一遍,虽然有点枯燥,但很多基础概念必须从这里理解

2、跟着Codelabs动手:官方的Codelabs很适合入门,每个案例都可以跑起来,很有成就感

3、看视频教程辅助理解:B站上找了几个口碑不错的鸿蒙教程,配合文档一起看

第一个坑:ArkTS不是TypeScript

这个坑我印象特别深。

因为之前用过TypeScript,看到ArkTS就以为差不多,结果调试的时候各种报错。后来才明白,ArkTS虽然基于TypeScript,但有很多限制,比如不支持某些ES6特性、有严格的类型检查等。

避坑建议:别想当然,老老实实看官方的ArkTS语言规范,把不支持的特性记下来。

第一周的小成果

跟着官方教程做了几个Demo:

· Hello World应用(虽然简单,但理解了项目结构)

· 简单的Todo List(学会了状态管理@State)

· 网络请求Demo(了解了鸿蒙的HTTP模块)

说实话这一周挺枯燥的,但打基础很重要。我把每个Demo的代码都敲了一遍,虽然慢,但理解更深刻。

第二阶段:实战启动(第3-8周)

确定项目:做一个开发者工具箱

学了两周理论,说实话有点枯燥了,手痒得很,特别想做点实际的东西。

记得那是个周五晚上,凌晨2点多还在调试一个网络问题。手机上想测个ping,结果发现没合适的工具。当时就在想,这鸿蒙应用市场上怎么连个像样的开发者工具都没有?

然后灵光一闪:既然没有,那我自己做一个不就行了?

说干就干!第二天周末,我就在几个开发者群里发了个问卷:“大家平时开发都用哪些工具?最需要哪些功能?” 结果反响还挺热烈的,收到了一堆回复。光是整理这些需求,我就花了一整天,最后统计出来20多个功能点。

技术选型与学习

有了需求,接下来就是技术选型了。

UI框架:ArkUI

这个没啥好纠结的,鸿蒙就用ArkUI。刚开始学的时候,最头疼的就是声明式UI的思维转换。以前做Android习惯了命令式,现在要适应声明式,脑子有点转不过来。

比如这段代码,我刚开始看着就晕:

后来慢慢理解了:状态变了,UI自动更新,不用手动去改UI。这个思想理解透了,后面开发就顺多了。

这块我大概花了一周时间,把@Component、@State、@Prop这些装饰器搞清楚了。官方文档来回看了好几遍,社区的案例也翻了个遍。

数据存储方案

数据存储这块纠结了好久。

本地配置用Preferences轻量级存储,这个比较简单,就是个键值对存储,用起来跟SharedPreferences差不多。

但跨设备同步数据就麻烦了。一开始想自己搭服务器,算了算成本,还要运维,太麻烦了。后来发现华为有CloudDB云数据库,试了试,发现还真不错。

不过CloudDB的学习曲线有点陡,光是权限配置就搞了我两天。什么Zone、ObjectType、同步模式,一堆概念,看得我头都大了。

网络请求

网络请求倒是简单,用的@ohos.net.http,跟其他平台的HTTP库差不多。

但有个坑要注意:网络权限要在module.json5里配置,我第一次忘配了,调试了半天才发现是权限问题,真是哭笑不得。

关键知识点攻克

1. 状态管理体系

状态管理这块,真的是我学习过程中最头疼的部分。

以前用React和Vue,习惯了它们的状态管理方式。鸿蒙这套完全不一样,刚开始真的一脸懵。

最基础的是@State,这个还好理解:

但父子组件通信就有点绕了,@Prop是单向的,@Link是双向的,经常搞混:

还有全局状态,用@Provide和@Consume,这个概念更抽象。

我踩过的坑:

第一个坑是修改数组的问题。有一次我直接用push往数组里加数据,结果UI死活不更新。debug了好久,后来才知道,@State修改数组要用整体替换:

第二个坑是@Link传参。我以为什么都能传,结果传基本类型的值就报错。后来才明白,@Link只能传引用类型。

第三个坑是跨页面传数据。一开始用路由参数传对象,结果数据丢了。群里大佬告诉我,复杂对象要用AppStorage,这样才靠谱。

2. 页面路由与生命周期

路由这块倒是比较简单,跟其他框架差不多:

不过有个地方要注意:页面栈管理。有一次我一直pushUrl,结果页面栈堆了好多,内存直接爆了。后来学聪明了,该用replaceUrl的时候就用replaceUrl,别啥都用push。

3. 权限申请

权限这块,真的是坑王之王!

刚开始做网络请求,死活调不通,后来才发现网络权限没配置。要在module.json5里加上:

配置完重新编译,才能用。这个坑我踩了好几次,每次都要重新编译,浪费好多时间。

更坑的是敏感权限,比如相机、位置这些,光配置还不行,还得动态申请:

有一次做二维码扫描功能,相机权限没动态申请,结果一直闪退。debug了一下午,最后发现是权限问题,真是欲哭无泪。

经验总结:

· 网络、存储这些普通权限,配置文件里声明就行

· 相机、位置、通讯录这些敏感权限,必须写代码弹窗让用户同意

· 不同鸿蒙版本、不同设备,权限可能不一样,要做好兼容

· 权限被拒绝后,要给用户友好提示,别直接闪退

这个阶段的成果

5周时间过去了,基础功能总算是做出来了:

· 系统工具模块:查设备信息、看系统状态,这些比较简单

· 网络工具模块:Ping测试、扫端口、测网速,这些是我自己最常用的

· 数据处理模块:加解密、MD5、各种格式转换,工具人必备

· 基础UI框架:导航、主题切换、收藏夹这些

说实话界面还挺粗糙的,但至少能跑起来了。第一次在真机上跑起来的时候,那种成就感,真的没法形容。

记得那天晚上,我把第一个可用版本安装到手机上,兴奋地打开每个功能试了一遍。虽然界面丑了点,bug也不少,但毕竟是自己从零开始做出来的东西,特别有成就感。

还特意拍了个视频发朋友圈,结果被好几个做开发的朋友问"什么时候能用",哈哈。

第三阶段:深入优化(第9-16周)

性能优化学习

应用能跑了,但新问题来了:卡!

特别是在朋友的低端机上,打开列表直接卡死。我拿着他手机试了下,确实卡得不行,完全没法用。那一刻脸都丢光了,赶紧回家改代码。

找资料学优化

性能优化这块,我也是从零开始学。主要参考了这些资料:

· 官方的性能优化指南(写得挺全面的)

· CSDN上一些大佬的优化案例(特别实用)

· 华为开发者论坛(遇到具体问题就来这里搜)

学到的优化技巧

1、懒加载是救命稻草

以前我是一次性把所有数据都渲染出来,列表长了自然就卡。后来学会了LazyForEach,只渲染可见区域的数据:

这个改完后,列表再长也不卡了。早知道就早点用了!

2、组件复用

之前不知道有@Reusable这个装饰器,每次滚动列表都在创建销毁组件,能不卡吗?

学会用@Reusable后,组件可以复用了,滑动列表的流畅度提升明显。

3、图片要压缩

有一次用户反馈说应用占内存太大。我一查,好家伙,都是图片的锅。图片没压缩,一张就好几MB,内存能不爆吗?

后来学聪明了:

· 大图一定要压缩

· 用Image组件的renderMode优化渲染

· 图片用完记得释放

4、预加载能提速

应用启动慢也是个问题。学了预加载机制后,在启动时提前把常用数据加载好,打开速度快了好几倍。

用户都说:“哎,你这应用怎么突然变快了?” 我心里暗爽,哈哈。

鸿蒙特色功能接入

这个阶段开始接入一些鸿蒙独有的能力。

1. 服务卡片开发

服务卡片是鸿蒙的特色功能,我做了几个实用卡片:

· 设备信息卡片

· 网络监控卡片

· 快捷工具卡片

学习要点:

· 卡片有独立的生命周期

· 数据更新要用FormProvider

· 卡片大小有限制,UI要精简

踩坑记录:

· 卡片不能直接访问网络,要通过主应用

· 更新频率有限制,不能太频繁

· 调试比较麻烦,要多看日志

2. 华为账号登录

集成账号服务,实现跨设备同步。

这块官方文档很详细,按步骤来基本没问题。主要是配置比较繁琐,要在AppGallery Connect后台设置。

3. 多端适配

适配手机、平板、PC三端,这个真的是大工程。

核心思路:

· 用响应式布局(GridRow、GridCol)

· 根据设备类型调整UI密度

· 不同设备提供不同的交互方式

代码示例:

这部分我连续加班了一周,测试了各种设备,最后终于搞定。

云服务接入:从零开始学云开发

这个阶段还有个重要的学习内容:华为云服务的接入。

为什么要学云服务?

工具箱要实现跨设备同步,用户在手机上收藏的工具,换到平板上也能看到。一开始我想自己搞个服务器,但算了算成本,还要运维,太麻烦了。

后来发现华为有云数据库和云函数服务,试了试,发现真香!

云数据库简介

还记得以前做项目的时候,最头疼的就是数据库服务器的维护和运维。有一次半夜服务器突然宕机,我爬起来处理到天亮,结果发现就是个简单的配置问题。现在有了华为的云数据库,这些问题都解决了。它不仅能帮我们实现数据在客户端和云端之间的同步,还支持离线访问,开发效率提升了不少。最重要的是,再也不用半夜爬起来处理服务器问题了,哈哈。

这里说个有意思的事,我们项目最开始用的是本地模式,结果用户反馈说换手机后数据就没了。后来改成缓存模式,用户都说好用多了。

云数据库的功能还挺丰富的:

· 同步模式很灵活:可以用缓存模式(数据自动从云端缓存到本地)或者本地模式(只存本地,不同步)

· 查询功能强大:支持各种条件查询、排序、分页,基本够用了

· 实时同步:数据改了能实时推送到各个设备,这个功能特别实用

· 离线也能用:没网的时候也能访问本地数据,有网了自动同步,用户体验好

· 安全性不错:数据全程加密,权限控制也挺细的

云函数简介

云函数就更方便了,完全不用操心服务器的事情。记得之前做项目,光是服务器配置就花了好几天时间。有一次为了配置服务器,我连续工作了36个小时,最后发现配置错了,又得重来。现在有了云函数,我们只需要关注业务逻辑的开发,其他的事情都交给华为云来处理,省心又省钱。而且按量计费,用多少算多少,再也不用担心服务器资源浪费了。

云函数的好处就是:

· 不用管服务器:代码写好了上传就行,服务器配置、部署、扩容这些都不用操心

· 可以连接其他服务:能调用云数据库、云存储这些服务,组合起来实现各种功能

支持的触发方式有:

· HTTP触发:客户端发个请求就能触发

· 数据库触发:数据库有变化时自动触发

· 自定义触发:根据自己需求配置

云数据库学习过程

第一次接触云数据库时,完全不知道怎么用。看了官方文档,发现概念挺多的:

· 存储区(Zone)

· 对象类型(ObjectType)

· 同步模式(缓存模式、本地模式)

我当时就懵了,这都是啥?

然后就一点点啃文档,跟着示例代码敲。第一个Demo跑起来花了我两天时间,中间遇到各种问题:

· 配置文件不知道怎么写

· 权限设置搞不明白

· 数据模型定义有问题

第一次踩坑:数据模型定义错误

记得特别清楚,我定义用户信息模型时,少写了字段类型映射方法。结果数据存进去全是乱的,查出来也对不上。

调试了一整天,最后发现是这个问题:

云函数的学习曲线

云函数更有意思了,它相当于服务器端代码,但不用自己管服务器。

学习流程是这样的:

1、在AGC控制台创建云函数项目

2、本地写代码,实现业务逻辑

3、配置触发器(HTTP、数据库触发等)

4、上传部署,客户端调用

第二次踩坑:云函数调用失败

第一次调用云函数时,死活调不通。返回错误信息也看不懂,整个人都不好了。

后来在论坛求助,发现是权限配置的问题。云函数的 function-config.json 里要配置认证方式:

数据库操作封装

为了方便使用,我把所有数据库操作都封装起来了。记得有一次项目上线,数据库操作没有做好封装,结果代码到处都是重复的数据库操作,改一个地方要改好多处,真是累死个人:

完整的云函数实现

云函数的主要处理逻辑,这里我们处理了增删改查这些基本操作。有一次我忘记处理异常情况,结果用户数据丢失了,被用户投诉了好久,所以错误处理一定要做好:

客户端调用示例

在登录成功后,我们需要把用户信息同步到云端,这个在实际项目中经常用到。有一次我忘记处理登录失败的情况,结果用户一直登录不上去,被用户骂惨了:

客户端调用起来就很简单了,就像上面那个例子一样。

云服务学习心得

经过这段时间的实践,总结几点经验:

1、先跑通官方Demo:别直接上手自己的项目,先把官方案例跑一遍

2、理解核心概念很重要:存储区、对象类型、权限这些要搞清楚

3、错误处理要做好:网络可能失败,数据库操作可能出错,都要处理

4、多看日志:遇到问题先看日志,大部分问题都能从日志里找到线索

5、参考社区案例:官方文档有时候不够详细,多看看社区的实战案例

开发建议总结:

数据模型设计:

· 用TypeScript类定义,有代码提示,不容易出错。我就因为类型定义没做好,debug了两天

· 字段类型映射一定要实现,不然数据存进去会乱。我就吃过这个亏

· 主键和索引要设置好,不然查询慢得要死。我们项目就因为这个,查询慢得像蜗牛

· 数据验证要做好,防止脏数据。有一次用户输入特殊字符,把数据库搞崩了

错误处理:

· 用 try-catch 捕获错误,这个很重要。我就因为没做好,程序经常崩溃

· 错误日志要记录详细,方便排查。有一次线上出问题,没日志,排查了好久

· 错误提示要友好,别让用户看不懂。我们产品经理就经常吐槽错误提示太技术化

· 网络不好的时候要有重试机制。我就因为没加重试,用户数据同步失败了好多次

性能优化:

· 合理用缓存,能省流量。我们项目加了缓存后,流量费用降了一半

· 批量处理数据,效率高很多。有一次我优化了批量处理,性能提升了10倍

· 查询条件要优化,别查太多没用的数据。我就因为查太多,把服务器搞崩了

· 同步频率要控制,别太频繁。有一次同步太频繁,用户手机都搞没电了

安全性:

· 访问控制要做好,别让不该访问的人访问。我们项目就被人恶意访问过

· 敏感数据要加密,比如密码。我就因为没加密,被安全部门警告了

· 用https,别用http。有一次用http,数据被截获了

· 数据验证要做好,防止注入攻击。我们项目就被SQL注入过

常见问题处理:

云函数调用失败:

遇到调用失败,先检查这些:

· 网络是否正常,有时候就是网络问题。我就因为网络问题,调试了一整天

· 云函数配置对不对,特别是权限设置。有一次权限配错了,调用了半天

· 参数格式对不对,这个经常出错。我就因为参数格式不对,debug了好久

· 权限别开太大,有一次权限开太大,差点出安全问题

数据同步问题:

同步出问题,检查这些:

· 数据模型定义对不对,字段类型要对。我就因为类型不对,同步失败

· 主键设置要合理,别重复了。有一次主键重复,数据全乱了

· 权限够不够,有时候就是权限问题。我就因为权限不够,改不了数据

· 数据格式对不对,特别是日期格式。有一次日期格式不对,同步失败

性能问题:

遇到性能问题,可以这样优化:

· 查询条件要优化,别查太多数据。我就因为查太多,把服务器搞崩了

· 数据要分页,一次别查太多。有一次没分页,查询超时了

· 加索引,查询会快很多。加了索引后,查询速度提升了100倍

· 控制数据量,别存太多没用的。有一次存了太多图片,存储空间用完了

云服务带来的好处

接入云服务后,好处太明显了:

· 不用自己管服务器,省心省钱

· 跨设备同步很方便,用户体验提升明显

· 按量计费,小项目几乎不花钱

· 安全性有保障,华为帮你做好了

预加载优化实践

说实话,刚开始做这个项目的时候,我们并没有太重视预加载这个问题。直到有一天,产品经理拿着用户反馈来找我:"用户说打开应用要等好久,体验太差了!"我一看评分,直接降到了3分以下。这才意识到问题的严重性。

后来我们团队花了两周时间专门优化这个问题。通过引入预加载机制,不仅提升了用户体验,还意外地发现了一些性能优化的机会。

经过多次尝试和优化,我们最终选择了安装预加载这种方式:

这段代码看起来简单,但实际开发中踩了不少坑。比如最开始没有做好错误处理,导致预加载失败时应用直接崩溃。后来加了错误处理,又发现日志记录不够详细,排查问题特别费劲。

预加载的几点经验:

· 数据要分片处理:别一次性传太多数据。有一次我们传了1000多条图标数据,服务器直接超时了。后来改成每次传50条,速度快了,还稳定。

· 错误处理要做好:日志要详细,失败了要给用户友好提示。记得有一次线上出问题,用户反馈说应用闪退,我们查了半天才发现是预加载失败导致的。

· 别重复加载:我们会在应用启动时检查上次预加载的时间,如果间隔太短就不重复加载,省资源。

实际项目经验:

我们项目里,预加载主要用在这几个地方:

· 图标资源预加载:启动时预加载系统图标,显示速度快了很多。用户反馈说图标加载明显快了。

· 用户数据预加载:登录后预加载用户信息,不用等数据加载了。这个功能上线后,用户登录体验好多了。

· 图片资源预加载:预加载常用图片,打开图片基本不用等。我们项目里有个图片预览功能,预加载后体验特别好。

这个阶段的收获

技术能力提升了不少:

· 掌握了性能优化的方法

· 学会了鸿蒙特色功能开发

· 积累了多端适配经验

· 学会了云服务开发

· 理解了Serverless架构

更重要的是,学会了系统性地解决问题,知道怎么用云服务简化开发。

第四阶段:完善上架(第17-24周)

应用测试与调试

测试用的工具:

· DevEco Studio的调试工具

· Profiler性能分析

· 真机测试(借了好几部不同型号的手机)

发现的问题:

· 内存泄漏(某些页面退出后没释放)

· 崩溃问题(空指针、异常处理不到位)

· 兼容性问题(不同系统版本表现不一致)

一个一个解决,过程很磨人,但也学到很多。

上架流程学习

上架流程是全新的知识,从零开始学:

· 应用签名:配置证书、Profile文件

· 隐私合规:隐私声明、权限说明

· 应用审核:准备截图、描述、审核材料

踩坑经历:

· 第一次提审被拒,隐私声明不完整

· 第二次又被拒,某个权限没说明用途

· 第三次才过,学到了很多审核要求

文档撰写与分享

同步在CSDN、掘金写技术文章,分享开发经验:

· 《鸿蒙ArkTS状态管理完全指南》

· 《鸿蒙性能优化实战:从卡顿到流畅》

· 《鸿蒙服务卡片开发避坑指南》

写文章的过程也是对知识的二次整理,收获很大。文章阅读量累计10万+,还认识了很多同行朋友。

我的学习经验总结

回顾这6个月,总结几点经验:

1. 学习路线建议

第1-2周:打基础

· 官方文档必读(至少通读一遍)

· Codelabs跟着做(动手很重要)

· 掌握ArkTS语法和ArkUI基础

第3-8周:实战项目

· 选一个实际项目练手

· 边做边学,遇到问题再查文档

· 加入开发者社区,多交流

第9-16周:深入学习

· 系统学习性能优化

· 掌握鸿蒙特色功能

· 研究优秀开源项目

第17周+:持续精进

· 关注新特性、新API

· 参与社区讨论和分享

· 尝试更复杂的项目

2. 必备学习资源

官方资源:

· HarmonyOS开发者官网(最权威)

· DevEco Studio文档

· Codelabs实战教程

· AppGallery Connect文档(云服务必看)

· 华为云服务开发指南(云函数、云数据库)

社区资源:

· 华为开发者论坛(遇到问题先来这里搜)

· CSDN鸿蒙专区(有很多实战案例)

· 51CTO、掘金等平台(技术文章质量不错)

· 鸿蒙云服务交流群(加群能认识很多大佬)

视频教程:

· B站上的鸿蒙系列教程

· 官方直播课程

· 云服务实战系列(推荐看,很实用)

3. 常见坑及避坑指南

4. 提升效率的技巧

善用工具:

· DevEco Studio的代码补全很智能

· 使用代码片段(Live Templates)

· 快捷键提高效率

建立知识库:

· 我建了个笔记本,记录踩过的坑

· 常用代码片段整理成模板

· 好的案例收藏起来备用

多实践多分享:

· 写博客巩固知识

· 参与开源项目

· 加入技术交流群

意外的收获

这6个月下来,收获远超预期:

技术层面:

· 从鸿蒙新手到能独立开发应用

· 掌握了完整的应用开发流程

· 积累了大量实战经验

个人成长:

· 项目管理能力提升

· 解决问题的思维更系统

· 学会了如何持续学习

社区影响力:

· 技术文章阅读10万+

· 认识了很多开发者朋友

· 应用被华为推荐博主推荐

· 获得2025年端云挑战赛第二名

· 入选1024程序员节推荐作品

10月份的时候,工具箱被华为推荐博主在B站推荐了(视频链接),还上了1024程序员节的公众号报道(文章链接),并且入选了1024程序员节推荐作品。那一刻真的特别开心,觉得这半年的努力都值了。

更让我惊喜的是,在2025年的端云挑战赛中,这个项目获得了第二名。说实话,参加比赛的时候根本没想过能拿奖,只是想检验一下自己的水平。当看到获奖名单的时候,真的特别激动,这半年的学习和努力得到了认可,那种成就感真的无法形容。

给新手的建议

如果你也想学习鸿蒙,我的建议是:

1、 不要怕,直接开始:不要等准备好了再学,边学边做效果更好

2、 做项目是最好的学习方式:找个实际需求,做个真实的应用

3、 多看官方文档:遇到问题先查文档,大部分都能找到答案

4、 加入社区很重要:认识同行,互相交流,进步更快

5、 坚持记录和分享:写博客、做笔记,帮助他人也是帮助自己

6、 云服务要早点学:现在的应用基本都要用到云服务,早学早受益

7、别怕踩坑:每个坑都是成长的机会,踩过的坑记得总结

特别建议:云服务学习路线

如果你的应用需要数据同步、用户系统,建议这样学习云服务:

第一步:了解基础概念(1-2天)

· 看官方文档,了解云数据库、云函数是什么

· 理解Serverless的概念

· 了解云服务的计费方式

第二步:跑通官方Demo(2-3天)

· 下载官方的云数据库Demo

· 下载官方的云函数Demo

· 本地跑起来,改改参数试试

第三步:集成到自己项目(1-2周)

· 先做简单的数据存储

· 再做数据查询

· 最后做数据同步

· 云函数从简单的HTTP触发开始

第四步:优化和完善(持续)

· 优化数据模型设计

· 添加错误处理

· 做好数据安全

· 优化性能

接下来的计划

学习永无止境,接下来我打算:

· 深入学习HarmonyOS NEXT的新特性

· 研究分布式能力的应用场景

· 继续参加各种技术比赛,提升自己

· 继续分享技术经验

鸿蒙生态还在快速发展,现在入场正是好时机。希望我的经历能给你一些启发和信心。

写在最后

从完全不懂鸿蒙,到现在能独立开发应用,这6个月真的是收获满满。

虽然过程中遇到很多困难,熬了很多夜,但每次解决问题后的成就感,每次看到用户反馈说好用,都让我觉得一切都值得。

学习技术最重要的,不是天赋,而是坚持和热爱。

如果你对鸿蒙开发感兴趣,欢迎一起交流学习。评论区见!

项目链接

· 鸿蒙开发者工具箱:华为应用市场

· 技术文章专栏:持续更新鸿蒙开发经验

愿每一位鸿蒙学习者,都能找到属于自己的星光之路!

—— 一个鸿蒙学习者的6个月成长记录(转载自CSDN,作者:在人间耕耘)