又是好久没有更新博客了,自己还是没有养成一个良好记录的习惯。创业项目的第一版还是比较成功的,虽然只是一个共手机用户浏览的wap版小网站,但是通过团队人员在微信公众号中的经营,使得每日有稳定的用户访问量。当然,这种统计还要感谢cnzz提供的站长工具的支持,真的是很好用。用户的增多代表着这个领域还是有需求量的,从而激发了我们下一个版本,不仅限于手机访问的web网站。新一轮的开发任务已经袭来,心得体会神马的也就少不了了。
在设计数据库和开发的时候我遇到几种不同的数据结构,以及想出的处理办法现总结如下(当然不对的话还会继续更新修改)。
1.需要在数据库中多建一张表么
在数据库设计的时候经常会遇到这样的情况,在某表中有一个企业类型字段,如“国企”,“央企”,“外企”等。通常情况下选择将这种设计分类的字段都设计成整形。通过数字来区分不同的类型。问题来了,那这个对应关系是应该存在程序中还是存在数据库中呢?
如果存在程序中类似于这样
存在数据库中就需要新建一张表,类似于这样将信息写在备注中
个人对比认为选择哪一个还是可以视情况而定。前者方便操作无需繁琐的数据库查询操作,后者利于扩展,方便添加类型维护类型等操作。然而如果类型或者此类字段不会在变化,那么个人认为使用第一种也未尝不可。因为数据库是擅长于存放经常变化的数据操作,如果不变那么就成为一张死表。
另外一种情况, 我现在想实现用户资料完整度,可以相应的给每一个项目赋予分值,如名字5分、手机10分。。等等。然后加起来除以100 就可以计算出完整度。那么属性与分值的这种对应关系就必须采用一种键值对的形式存储。数据库还是程序中的类似hashmap结构呢?答案是都不,针对这种情况结合吃了几次亏后发现应该使用配置文件来存储类似键值对,专业十分方便后期修改分数。当然,如果涉及到复杂的或者可视化的修改分值还是存在数据库中比较好。
推荐一种.
Properties类型的配置文件,通用方便。
a)Properties类与Properties配置文件
Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型
b)Properties中的主要方法
load(InputStream inStream)
可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象
<span style="white-space:pre"></span><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 22px; white-space: pre-wrap; word-wrap: break-word; line-height: 21px; font-family: 'Courier New' !important;"> Properties pro = <span style="color: rgb(0, 0, 255); line-height: 1.5 !important;">new</span><span style="line-height: 1.5 !important;"> Properties();
FileInputStream in </span>= <span style="color: rgb(0, 0, 255); line-height: 1.5 !important;">new</span><span style="line-height: 1.5 !important;"> FileInputStream("a.properties");
pro.load(in);
in.close();</span>
store(OutputStream out, String comments)
这个方法将Properties类对象的属性列表保存到输出流中。如下面的代码:
FileOutputStream oFile = new FileOutputStream(file, "a.properties"); pro.store(oFile, "Comment"); oFile.close();
- //加载/保存普通键值对文件
- load(InputStream inStream)
- store(OutputStream out,String comments)
- //加载/保存XML键值对文件
- loadFromXML(InputStream in)
- storeToXML(OutputStream os,String comment)
- //获取/设置键的值
- getProperty(String key)
- setProperty(String key,String value)
- //列出所有的键值对
- list(PrintStream out)
c)代码示例
package com.rzzl.tools;
import java.io.InputStream;
import java.util.Properties;
/**
* 构造一个读取配置文件的单例模式 提供读取value的方法
* @author demontf
*
*/
public class MyProperties {
public Properties pro;
public static MyProperties myPro;
private MyProperties(){
pro = new Properties();
try {
//String filePath=this.getClass().getResource("/integrity.properties").getPath();
//InputStream in = new BufferedInputStream(new FileInputStream(filePath));
//获取src目录下的配置文件
InputStream is = this.getClass().getResourceAsStream("/integrity.properties");
pro.load(is);
} catch (Exception e) {
e.printStackTrace();
}
}
public static MyProperties getInstance(){
if(myPro==null){
myPro = new MyProperties();
}
return myPro;
}
public int getProperty(String key){
String value=pro.getProperty(key);
if(value!=null){
return Integer.parseInt(value);
}
return -1;
}
}