工程 (改)
通常一个专业软件,都需要一个用来贯穿生命周期的记录模型,自由结构,方便业务的进行。
通常展示形式为树形文件列表,不过更为常见的是,一个文件,比如doc,ppt,psd。
这个记录的模型,通常可以导出素材,导出素材,其本身而言,并不重要。
工程文件的常见实现结构
1.文本,只更改后缀,(xml,json,yaml,ini )
目前主流是使用xml作为工程的配置层,json作为参数配置层,yaml也颇为常见。
ini通常作为硬件参数配置,因为是winapi,在C++中调用简单,所以通常写硬件配置,在不复杂的情况下,会使用。c++中解析xml,json,yaml 等其他的结构,基本是需要引入额外的库。
2.自定义格式。结构体
通常从 一个特定的文件头开始, 通常是文件后缀的ASCII缩写,文件头的长度一定,方便检索。
中间的文件看情况分成若干种,比如为了快速写入设置的内存转移,比如为了兼容存储空间的压缩编码(mp4等)
制定一个私有格式的好处,无疑是很大的。但缺陷也很明显,用户愿不愿意为这个私有格式买账。
就像是pdf的国产私有格式ofd,或者是知网私有格式.caj 即使这些并不小众,但我想知道的人,除了对应领域不得不使用的人之外,应该还是比较少的,对其的二次开发和支持的软件也都非常小众。
当然也有取消的方式,因为目前公有的格式是固定的,所以让指定的私有格式,兼容原本的格式,不过这就更加吃力不讨好。
一脉相承的继承是比较常见的,比如高版本的软件可以打开低版本的工程,但是低版本不存在对应高版本的兼容性。
3.rar,sql更改后缀
这种方案是对于2的一种实现,常见的也比较多,比如docx,就是自定格式后的压缩格式。当然也有一些是建立了本地数据库的,比如sqlite。
这种方案,也好也不好,比较low
目前配置文件关联,在windows 中
打开 HKEY_CLASSES_ROOT
添加自定义的后缀名项,并在默认值中添加自定义的备注名值
添加刚才定义定义的备注名项,添加DefaultIcon ,默认值位需要添加的图标(注:icon 可以从exe ,0 中获取,或者dll 中获取,或注册表中获取)
添加shell (交互操作选项),添加 open(操作,或者edit等),添加command 。
注册表修改完成之后,并不会自定更新,需要重启 explorer.exe (文件管理系统),或者重启系统也可以
具有管理员权限的情况下,可以强制重启。或者刷新注册表应用。
工程文件
工程的概念是比较广泛的。建立层级视情况而定。
比较常见的,解决方案为最上极,一个解决方案下,软件只运行一个。一个解决方案下,有多个工程。
一个工程下,是一个轮次的文件。
解决方案下的配置参数,影响界面参数,工程中的配置参数,记录本次工程执行的参数,自定义文件中会记录,拍摄这张图片时,需要存储的参数。
同一个工程下的多次后续处理,以及相关的参数配置,应该保存在同一个工程目录中。
处理的文件,默认不保存在本地,只有选择了保存,才会保存,中间文件不存储。
文件的导出,是基于单个文件的,工程中提供批量导出的选项。
也可以创建一个空白的工程,然后导入外界的图像或者视频进行处理。
工程文件的结构应该是树形的,应该有继承关系,应该有属性,打开的时候,应该存在对应的命令。并且命令应该记录,可以撤销。
考虑到解耦,工程应该处理到具体文件的打开命令,具体的执行和工程模块的实现应该分离。
一套完整的软硬件系统,通常以工程作为核心,从采集数据保存到工程之中,然后处理数据,展示并导出结果。
一个批次的数据,应该被记录在工程的最外层,统计保存处理数据的状态。
导出结果的逻辑独立,一般是生成批次报表。
这个逻辑可以简化抽象出来,如果不需要回顾工程,那么可以 把工程剥离,只进行采集,处理,结果列表展示。
用户的逻辑独立于工程,可以绑定在其中,也可以不绑定在其中。做用户最大的好处是后续的联网处理。
否则,做的不是用户,是权限管理。
联网之后,可以做的事情就多了,但联网的安全性,是很难说的,所以目前主流的软件,虽然从技术上来看,实现这些都是小事情。