2013-04-28 49 views
0

我实现了一个简单的自然语言解析器我的Grails应用程序的一部分,以实现一个命令行界面,用户可以输入诸如“创建新用户”,应用程序将执行命令处理这个任务等,我已经创建的文件,如:错误的src/Groovy类

Tokenizer.groovy 
PartOfSpeechTagger.groovy 
SyntacticAnalyser.groovy 
SemanticAnalyser.groovy 
CommandGenerator.groovy 

由此这些被放置在src/groovy

在我的控制器,我有一个run()方法实例化这些解析器类,并调用这些对象中的方法,像这样:

def run() 
    {  
     def tokenizer = new Tokenizer() 
     def posTagger = new PartOfSpeechTagger() 
     def syntacticAnalyser = new SyntacticAnalyser() 
     def semanticAnalyser = new SemanticAnalyser() 
     def commandGenerator = new CommandGenerator() 

     //split command string into tokens 
     def words = tokenizer.getTokens(params.command) 
      def taggedWords = posTagger.tagWords(words) 
      ... and so on 
    } 

我的问题是我希望能够到错误信息发送回这些解析器类中出现的客户端,例如,在Tokenizer如果无效Token发现等

什么是最好的办法,我处理这些错误,并将它们发回给浏览器?

我有错误,在这种级别的处理没有以往的经验,所以任何输入欢迎。

最初我曾想过抛出一个自定义的InvalidTokenException并将其捕获到控制器中,并将文本呈现给客户端,但这看起来不正确?!

有什么想法?

回答

1

您可以throw自定义异常到控制器,并使用render

//You can use whichever contentType you need, here I have mentioned json 
render (status: HttpStatus.NOT_FOUND.value(), contentType: "application/json" text: exception.getMessage()) 

还有一个观察我认为我应该分享。所有这一切你src/groovy添加分析器工具类的是好的,但你会与n数每个实例的结束为n数从Controller电话。例如,来自控制器的单个呼叫将最终创建实用程序类的5个实例(Tokenizer, PartOfSpeechTagger, SyntacticAnalyser, SemanticAnalyser, CommandGenerator)。

为了优化上面的实现,你可以service类各个电力公司。由于service类缺省为Singleton。每个服务器只会创建一个实例。因此,您最终将在整个应用程序中使用5个实用程序服务实例。

或明确指定实用工具类Singleton。

只是这可能是对你感兴趣的想法。

+0

是的,这是有益的感谢,没有并发问题,我认为? – 2013-04-28 16:59:44

+0

不,只要你在处理局部范围内的东西的方法。在服务中使用全局范围并不代表我会分享的建议。 – dmahapatro 2013-04-29 03:38:26