面向对象的导表程序

不清楚啥是导表,可以参考之前的文档《如何让你的程序加载Excel配置文件》

我们之前的思路类似于面向过程,比如先读数据,再处理数据,最后导出数据。那么,在工具功能能够保持单一时,这么做也ok。随着功能迭代,导表工具要接受各种高级特性时,面向过程的逻辑,往往就很受伤。

比如,我们需要添加数据差异导表功能,或者需要做不同的数据源和导表先后依赖,或者要改成多线程,或多进程导表?所有的这些优化,都需要动流程或是流程的一部分。

于是我们想到能不能使用一种各面向对象的方式来实现这个过程,后期用多态+组件的方式来扩展会容易的多。

基本的组件

CodeGenAgent

一个agent对应于一个最终生成的代码问题,比如xxconfig.cs,一个agent的常规工作方式,就是加载一张表格(xlsx),然后处理格式化,并最终导出成xxconfig.cs。当存储若干个这个导出文件任务时,就会存在n个CodeGenAgent对象,通过worker线程调度就可以同时处理了。

高级特性

依赖和后处理

有的表格可能需要在另一个表之前处理后,才能处理,有一个依赖关系。这种情况就只需要配置CodeGenAgent对象依赖链就可以了,也可以通过类似数据管道的方式,来共享前一步的一些数据。

差异导表

每个实体可以维护自己上次导表的hashcode。再下次导表时,对比hashcode,判定是否直接跳过任务就可以了。

性能监控

每个CodeGenAgent可以从自己的生命期各个步奏来进行性能监控,相比于之前的导表流做法,更容易实现类似流水线的流程,可以最大化平衡io和cpu占用的问题(读数据和导出占io,处理时占cpu)

你可能感兴趣的:(游戏,C#,序列化)