构建解析器库的最佳实践

时间:2014-03-31 06:08:41

标签: c#

我正在构建一个能够解析标准化文件格式的解析器库。如果解析失败,用户应该能够获得有关解析失败原因的日志信息(即文件与标准的不同之处)。

我不确定如何实现这一点,我想在日志的解析时间内触发事件可能会很方便,但是存储日志信息也是个好主意。

我应该使用工厂模式还是基于对象实现解析?

工厂模式:

FileModel.ParserInformation += OnParserInformation;
var myModel = FileModel.Parse(@"C:\temp\myfile.file");
FileModel.ParserInformation -= OnParserInformation;

//Parsing failed
if(myModel == null)
{
    // Handle case 
}
else
{
    // Continue work
}

临:

  • 用户未获得无法使用的空对象

缺点:

  • 解析信息是静态的,事件可能与之无关 当多个解析器同时运行时的实际解析
  • "离线"解析失败时,日志不可用

对象基础:

var myModel = new FileModel();
myModel.ParserInformation += OnParserInformation;
myModel.Parse(@"C:\temp\myfile.file");
myModel.ParserInformation -= OnParserInformation;

if(myModel.HasData)
{
    // Continue work
}
else
{
    // Handle errors
    var logs = myModel.GetLogInformation();
}

临:

  • 离线日志
  • 基于对象的事件处理

缺点:

  • 对象可以在没有任何"内容的情况下即时发布"内部

有什么想法吗?

0 个答案:

没有答案