432
技術社區[雲棲]
【Agile Pair Coding】Data Type Mapping
介紹
今天下午用了1個小時左右,和同事Agile Pair Coding敏捷開發了一把,感覺挺爽的。
Agile Pair Coding給我們帶來的直接好處是:相互不浪費時間(就兩個人),高效;idea很快達成共識(就兩個人),不糾結於無謂的討論;idea立馬coding,不沉迷於頭腦風暴;代碼更嚴謹;重構概率大;加深基情;相互學習,相互欣賞,相互指正;避免無知,避免自我感覺良好......
代碼主要實現:從所有類型文件中,得到所有NE類型下的所有Object類型下的所有屬性的數據類型。
當然,本文隻是一個短時間內的Draft版本,可能會有一些問題,敬請指正。
package shuai.study.spring.validator;
/**
* @ClassName: Service
* @Description: TODO
* @author Zhou Shengshuai
* @date 2014年8月8日 下午3:40:45
*
*/
public interface Service {
public void initialize();
public void destroy();
}
package shuai.study.spring.validator;
/**
* @ClassName: TypeMapper
* @Description: TODO
* @author Zhou Shengshuai
* @date 2014年8月8日 下午3:40:26
*
*/
public interface TypeMapper {
public String getType(String neType, String objectType, String fieldName);
}
package shuai.study.spring.validator;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName: FileTypeMapper
* @Description: TODO
* @author Zhou Shengshuai
* @date 2014年8月8日 下午3:10:06
*
*/
public class DataTypeMapper implements TypeMapper, Service {
private String filePath = null;
private Map<String, Map<String, Map<String, String>>> allNeTypeMap = null;
public DataTypeMapper() {
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
@Override
public void initialize() {
allNeTypeMap = getAllNeTypeMap(filePath);
}
@Override
public void destroy() {
allNeTypeMap.clear();
allNeTypeMap = null;
}
@Override
public String getType(String neType, String objectType, String fieldName) {
if (allNeTypeMap != null && allNeTypeMap.containsKey(neType)) {
Map<String, Map<String, String>> neTypeMap = allNeTypeMap.get(neType);
if (neTypeMap != null && neTypeMap.containsKey(objectType)) {
Map<String, String> objectTypeMap = neTypeMap.get(objectType);
if (objectTypeMap != null && objectTypeMap.containsKey(fieldName)) {
return objectTypeMap.get(fieldName);
}
}
}
return null;
}
private static Map<String, Map<String, Map<String, String>>> getAllNeTypeMap(String filepath) {
Map<String, Map<String, Map<String, String>>> allNeTypeMap = new HashMap<String, Map<String, Map<String, String>>>();
File[] files = new File(filepath).listFiles();
for (File file : files) {
String filename = file.getName();
if (filename != null && filename.matches("\\w+-.*")) {
allNeTypeMap.put(filename.split("-")[0], getNeTypeMap(file));
}
}
return allNeTypeMap;
}
private static Map<String, Map<String, String>> getNeTypeMap(File file) {
Map<String, Map<String, String>> neTypeMap = new HashMap<String, Map<String, String>>();
BufferedReader reader = null;
String line = null;
Map<String, String> objectTypeMap = null;
try {
reader = new BufferedReader(new FileReader(file));
while ((line = reader.readLine()) != null) {
if (line.matches("\\[\\w+\\]")) {
String objectType = line.substring(1, line.length() - 1).trim();
if (!neTypeMap.containsKey(objectType)) {
neTypeMap.put(objectType, new HashMap<String, String>());
}
objectTypeMap = neTypeMap.get(objectType);
} else if (line.matches("\\b*\\w+\\b*:\\b*\\w+\\b*")) {
String[] array = line.split(":");
if (objectTypeMap != null && array != null && array.length == 2) {
objectTypeMap.put(array[0].trim(), array[1].trim());
}
}
}
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
return neTypeMap;
}
}
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="https://www.springframework.org/schema/beans" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <bean init-method="initialize" destroy-method="destroy" scope="singleton"> <property name="filePath" value="D:/userdata/shengshu/Desktop/validation" /> </bean> </beans>
import org.springframework.context.support.FileSystemXmlApplicationContext;
/**
* @ClassName: Test
* @Description: TODO
* @author Zhou Shengshuai
* @date 2014年8月8日 下午3:52:55
*
*/
public class MapperApp {
public static void main(String[] args) {
@SuppressWarnings("resource")
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("spring-context-mapper.xml");
TypeMapper mapper = (DataTypeMapper) context.getBean("TypeMapper");
System.out.println(mapper.getType("CSCF", "PcscfFunction", "MaxBHSA"));
context.getBeanFactory().destroySingletons();
}
}
最後更新:2017-04-03 05:39:49