2010-4-14DSL
刚看了老赵的一片文章,发现现在做的项目的配置文件,就有点儿像内部DSL了,汗颜...
不过现在这个配置处理方式并不太完美,比如说前套中加入功能,外层的处理很难给内层的处理加功能,只能是再在中间加上一层处理并且可能会重复执行某些已经做的事情来解决这个问题,举个例子:
classA可以获取到矩形,假如是写死的;classB可以获取到屏幕截图,前提是需要一个矩形范围;classC可以将图片转换为二进制格式,前提是需要有个图片;classD可以通过二进制图片获取信息,前提是需要有个二进制图片。如果我需要识别指定位置信息的功能,就可以在配置中配置classA到classD,并从classD开始执行,一直延续到classA为止,classD才能获取到自己执行所需要的信息。
现在新加入一个功能,需要在图片进行二进制转换的时候,把没有转换的图片进行保存,并且返回保存路径。这下就麻烦了点儿了,不可能在classB与classC之间加上这层处理,因为classC的前提是一张图片,而不是一个路径;也不能在classD中直接加入保存的方法,因为classD的前提是二进制化的图片,并不知道原图的存在。
现在的做法是,使用classE进行图片保存,由classD来激活这个操作。这样一来,一是classD增加了一些与主逻辑并不太相关的信息;二是需要执行两次classB->classA的过程,第一次执行是classD的主逻辑需要,第二次是classE逻辑的需要。
个人觉得产生这个问题的主要原因是因为配置好的东西无法用代码进行干预,也就是说,可以把每个配置项(例子中的类)看做是一个方法,方法的参数是从另一个配置项得来的,这个特点既是优点(代码只需调用最外一层也就是classD的配置结果即可,不用管它的参数来源,比如所二进制化的图片是从文件来的,还是从屏幕截图转化来的)也是缺点。暂时没有想到有什么更好的办法去解决这个问题,或许可以想出一种方法,使配置项所需参数(前提)既可以通过配置得来,又可以通过代码获得...
