问题描述
项目里有时会有类型这个概念比如说资讯类型、商家类型等等。类型表一般是create table stype (id int not null primary key auto_increment, parentid int ,typename varchar(50),typecode varchar(10));insert into stype(parentid,typename,typecode) values(null,'typename1','typecode1');然后我在Constants.java里面 定义了一个public Static final String xxcode = 'typecode1'; //这个typecode1 和数据库里的值是一样的在代码里使用就是selectBytype(xxcode );这样写有一个问题就是我的Constants里面的变量要人工的和数据库里面的数据相对应,而且万一数据库中分类一多,比如说一百多几百就很容易出错。想问下 关于分类的这种问题大家怎么处理的问题补充:一楼二楼都是说不要硬编码,这里我主要迷惑的是:typecode的值是已经有了的 stype 表里的typecode字段, 这个值是不会变的。在代码里我想得到一个可以阅读的 让人知道这个什么意思的常量来代替typcode中的值。那么如果我不在constant里面写public Static final String FOOD_CODE = 'food';假设当我想取得餐饮美食这个类型的数据 我该怎么在代码里面写呢?selectBytype(//这里写什么参数);
解决方案
这个看你个人编码习惯了。你这种做法也可以,但必须保证注释清楚,否则以后维护有隐患。另外你在同一个变量中有成百上千的分类调用时找就得找半天。还有我说的写到数据库中,数据分类字典维护程序可以做成通用程序,不必一个分类写一个模块。
解决方案二:
这要具体看你的情况了。引用selectBytype(//这里写什么参数); 我觉得问题分两种情况:1,这里的参数也是从数据库中来的,可能是另外一个表,比如(餐饮美食)数据表,这里的数据属于food类型,因此你可以从表中取得food这个值,然后selectBytype(//变量,其值为food)。2,你直接在程序中硬编码来写selectBytype("food"),得到餐饮美食的数据。这取决于你的需求了。
解决方案三:
最好在数据库中再建立一个分类字CategoryDic{ ID 主标识; Name 分类名称; Code 分类编号;(对应你的typecode) }这样做后台维护的时候写一个通用的分类字典维护界面就可以了用的时候到数据库去查一下分类字典的ID,然后查出typeCode,调用selectBytype(xxcode )就可以了。这样总比你写在变量中灵活通用一些。
解决方案四:
Constants里面的常量应该是从数据库中取出来的数据,可以考虑把这些类型常量放到一个Map中去,就可以方便的取了。而不是根据数据库中的数据,自己在Constants类里面对应来硬编码的。