【发布时间】:2015-09-21 07:07:54
【问题描述】:
我需要关于解析器设计策略的建议
考虑type1, type2, type3 是三个不同格式的不同csv 文件,它们将分别被Parser1, Parser2, Parser3 解析。
将来,这将演变为解析来自其他来源(如 dbs)的信息。
还会有新的解析器出现。设计解析器的最佳方法是什么? factory/ abstract factory 是一个好的候选人吗?
一些好处和例子会有帮助吗?
Type1 - Parser1
Type2 - Parser2
Type3 - Parser3
我已经记下了我的代码,寻找有价值的建议。
interface Parser<T>{
public List<T> parse (string s);
}
//where T - data model
class Parser1CSV implements Parser<Model1>{
//implement
//s-csv file
public List<Model1> parse (string s){
}
}
class Parser1DB implements Parser<Model1>{
//implement
//s- connection string
public List<Model1> parse (string s){
}
}
class Parser2CSV implements Parser<Model2>{
//implement
//s-csv file
public List<Model2> parse (string s){
}
}
//same way other parsers are implemented
interface AbstarctFactory<T>{
public Parser<T> createParser();
}
class Parser1Factory implements AbstarctFactory<Model1>{
private String type;
Parser1Factory(String type){
this.type = type;
}
public Parser<Model1> createParser(){
if(type.equals("CSV"){
return new Parser1CSV();
}else if(type.equals("DB"){
return Parser1DB();
}else{
throw UnSupportedOperationException("Not Supported.");
}
}
}
//same way other parser factories are implemented
class ParserFactory{
public static <T> Parser<T> getParser(AbstarctFactory<T> factory){
factory.createParser();
}
}
//Usage:
Parser<Model1> parser = ParserFactory.getParser(new Parser1Factory("CSV"));
List<Model1> list = parser.parse(file);
目前,我没有使用 DI 框架。当我需要使用时会有什么好处和影响?
【问题讨论】:
-
我投票结束这个问题,因为这个问题属于Programmers Stack Exchange。
-
@Seelenvirtuose 这个问题不适合程序员——它会很快被否决并在那里关闭,请参阅meta.programmers.stackexchange.com/questions/6483/… 推荐阅读:What goes on Programmers.SE? A guide for Stack Overflow
-
@gnat 关于去哪里的决定似乎真的很复杂。因为我很少浏览程序员,所以我首先阅读了他们的help page on being on-topic。阅读“关于软件开发的概念性问题”、“软件架构和设计”以及“算法和数据结构概念”——此外,it is not about 部分没有被击中,我得出结论这似乎是这个地方。请告诉我我哪里出错了,这个问题属于什么地方。
-
@gnat 此外,OP 在那里问了这个问题并得到了投票(并回答)!
-
@Seelenvirtuose 这个问题可能是程序员的话题,这不是问题。问题是,无论它在哪里成为话题,这都不是一个很好的问题,因为它太宽泛了。我不知道为什么这个 PSE 交叉帖子得到了赞成。
标签: java parsing dependency-injection abstract-factory