总所周知,常量必须要在申明的时候初始化。如下:const DAT_IOL_IO_TAG = 10但是问题是,在我们的项目中,存在数百个这样的常量。而这些常量的数值经常发生变化。于是我们的解决方案是将这些常量值记录在.ini的文件中。常量改为变量,在程序初始化的时候赋值。'in the public module
public DAT_IOL_IO_TAG as integer
'in initialize module
DAT_IOL_IO_TAG = getFromINI("COLDATA","DAT_IOL_IO_TAG",0,"DCES.ini")
DAT_IOL_IO_TYPE = getFromINI("COLDATA","DAT_IOL_IO_TYPE",0,"DCES.ini")
DAT_PTL_PT_TAG = getFromINI("COLDATA","DAT_PTL_PT_TAG",0,"DCES.ini")
DAT_PTL_PT_PWUI = getFromINI("COLDATA","DAT_PTL_PT_PWUI",0,"DCES.ini")
DAT_EI_I_PWUI = getFromINI("COLDATA","DAT_EI_I_PWUI",0,"DCES.ini")
.....[code=INIFile]
[COLDATA]
DAT_IOL_IO_TAG = 19
DAT_IOL_IO_TYPE = 31
DAT_PTL_PT_TAG = 21
DAT_PTL_PT_PWUI = 1
DAT_EI_I_PWUI = 1
[/code]这种解决方案虽然解决了常量值经常变化的问题,但是产生了很多极难维护的代码。
在模块initialize里。有300个常量就有300条语句。
我觉得,常量的名字和ini文件中的字段名是一致的,所以能不能有这样的语句用一个循环把所有的常量都初始化了?foreach constVar in ALLConst
constVar = getFromINI("COLDATA",constVar.name,0,"DCES.ini")
next constVar
public DAT_IOL_IO_TAG as integer
'in initialize module
DAT_IOL_IO_TAG = getFromINI("COLDATA","DAT_IOL_IO_TAG",0,"DCES.ini")
DAT_IOL_IO_TYPE = getFromINI("COLDATA","DAT_IOL_IO_TYPE",0,"DCES.ini")
DAT_PTL_PT_TAG = getFromINI("COLDATA","DAT_PTL_PT_TAG",0,"DCES.ini")
DAT_PTL_PT_PWUI = getFromINI("COLDATA","DAT_PTL_PT_PWUI",0,"DCES.ini")
DAT_EI_I_PWUI = getFromINI("COLDATA","DAT_EI_I_PWUI",0,"DCES.ini")
.....[code=INIFile]
[COLDATA]
DAT_IOL_IO_TAG = 19
DAT_IOL_IO_TYPE = 31
DAT_PTL_PT_TAG = 21
DAT_PTL_PT_PWUI = 1
DAT_EI_I_PWUI = 1
[/code]这种解决方案虽然解决了常量值经常变化的问题,但是产生了很多极难维护的代码。
在模块initialize里。有300个常量就有300条语句。
我觉得,常量的名字和ini文件中的字段名是一致的,所以能不能有这样的语句用一个循环把所有的常量都初始化了?foreach constVar in ALLConst
constVar = getFromINI("COLDATA",constVar.name,0,"DCES.ini")
next constVar
还可以选择加一个Property Get防止修改(只读属性).或者再加一个dictionary保留程序中名称/ini文件中名称的对应关系映射.实现方式:
读取的时候将名称与对应的值通过关系映射读入到dictionary中,可以用for循环来实现,呵呵.方式1(直接使用字符串,此种方式可以减少代码量):
property get Properties(byval name as string) as long
if dict.exists(name) then
Properties = dict(name)
else
debug.assert false
end if
end property方式2:
property get DAT_IOL_IO_TAG() as long
DAT_IOL_IO_TAG = dict("DAT_IOL_IO_TAG")
end property:-)
public g_Consts as collection'初始化
dim s as string, a() as string, i as long
set g_Consts as new collection
s = Trim$(getFromINI("COLDATA",vbNullString,vbNullString,"DCES.ini"))
a = split(s," ")
for i=0 to ubound(a)
s = getFromINI("COLDATA",a(i),0,"DCES.ini")
g_Consts.Add CLng(s), a(i)
next'使用
debug.print g_Consts("DAT_IOL_IO_TAG")
debug.print g_Consts("DAT_IOL_IO_TYPE")