备份:导出文件,并取一个合理的名字。
遗留问题:
第八个示例与之前的示例代码重复,功能重复。
约定和规则:
每个示例在 QFramework 目录下创建一个文件夹,文件夹的格式是: 数字.示例的功能
每个示例写一个脚本,脚本中包含可复用的静态方法和 MenuItem 方法。
每写一个示例进行一次导出,导出的文件名后边加上日期和时间,这个功能已经在导出功能里内置了。
示例分类:
知识学习&收集
API 收集
C# 语法实践
库本身的功能
规则实现
使用流程提供及优化
效率提升(编码体验、逻辑复用)
项目实用工具收集
我们先解决第一个问题,备份问题。
文件命名导出文件很容易,但是文件的名字就比较有讲究了。现在我们的库呢第一次进行比较大的整理,未来说不定有很多次这样的整理。所以文件命名应该能够体现库的某一个阶段。
我们目前的命名规是 QFramework_日期_时,这种命名能够体现库的某个时间点,从而我们能够在多个文件之间找到最后一次更新的库。但是这样还不够。如果现在想找到第一篇文章的库,那要去找到第一篇文章写的时间。找到这个库的难度会随着时间越来越困难。不过这种命名已经完成了它的使命,最起码从第一个示例到现在没出现太大的问题。
但是有新的要求了。因为示例的代码会被删除,这算是代码的比较大的变更了,而且看专栏的童鞋所在的阶段也不同,有的童鞋刚刚看第一篇而有的童鞋已经完结了。所以要考虑库的各个阶段。
如何表示库的某个阶段呢?
有一种比较好的方式,就是按照文章的标题命名,比如这篇文章之前的库名字为 QFramework_19_开始整理,或者按照最新的示例名字,比如 QFramwork_13 GameObject 显示、隐藏简化。但是这样的名字过了很久回过头来找文件还是会要凌乱好一会,所以并不合适。
比较合适的是用版本号,我们生活中使用的软件都有版本号,比如 Unity 5.6.5 或者 2017.2 等等。对于开发者来说版本号已经是比较熟悉的东西了。
使用版本号命名的文件格式为: QFramework_vX.Y.Z X 是主版本号,用于不向前兼容的更新。 Y 是中间版本,用于可向前兼容的功能性更新。 Z 是小版本号,用于功能完善和 bug 修复的更新。
一般都是从 v0.1.1 这个版本开始发布的,但是这个版本呢叫做 mvp 版本,也就是最小可验证版本。我们的库还没有到这个阶段,而且版本号这个东西刚开始用,是用于方便自己记忆的,也是为了做一个备份而已,还不用发布给别人用。所以我们的备份版本为 v0.0.0 。
还有一点要注意的是,v0.x.y 这个阶段的版本可以不考虑向前兼容。但是如果已经 v0.1.1 了,就要发布出去了,也有用户在使用了,那就要尽可能要做到向前兼容。
向前兼容的意思是,用户升级版本不必更改 API 的使用。
开始备份在上一小节得到了结论。
现在,我们要开始着手导出。使用导出工具导出文件,并手动把文件名字命名为 QFramework_v0.0.0。
这样备份就算完成了。
可以把它放到网盘或者硬盘里。这样就可以安心整理代码了。
小结版本号算是约定和规则的内容。
危险的操作今天开始,进行逐个示例的整理。
第一个示例先看第一个。
#if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; using System; namespace QFramework { public static class LogFileName { #if UNITY_EDITOR [MenuItem("QFramework/1.生成 unitypackage 名字")] #endif private static void GenerateUnityPackageName() { Debug.Log("QFramework_" + DateTime.Now.ToString("yyyyMMdd_hh")); } } }因为在第八个示例里给提取成方法了,所以这个示例可以直接删除了。
删除之后的文件结构如下图所示。
第二个示例代码如下
#if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public static class CopyText2Clipboard { #if UNITY_EDITOR [MenuItem("QFramework/2.复制文本到剪切板")] #endif private static void CopyText() { GUIUtility.systemCopyBuffer = "要复制的关键字"; } } }这个也在第八个示例中提取成方法了,所以这部分也可以直接删了, 删除之后的文件结构如下图所示:
第三个示例代码如下:
using System; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class GenerateUnityPackageName2ClipBoard { #if UNITY_EDITOR [MenuItem("QFramework/3.生成文件名到剪切板")] #endif private static void MenuClicked() { GUIUtility.systemCopyBuffer = "QFramework_" + DateTime.Now.ToString("yyyyMMdd_hh"); } } }