0

grails アプリの一部として単純な自然言語パーサーを実装して、ユーザーが「新しいユーザーの作成」などのコマンドを入力できるコマンド ライン インターフェイスを実装し、アプリケーションがこのタスクを実行するなど、次のようなファイルを作成しました。 :

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してコントローラーでキャッチし、テキストをクライアントにレンダリングすることを考えていましたが、これは正しくないようです?!

何かご意見は?

4

1 に答える 1

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())

共有すべきだと思うもう1つの観察があります。追加したすべてのパーサー ユーティリティ クラスsrc/groovyは適切ですnnController. たとえば、コントローラーからの 1 回の呼び出しで、Tokenizer, PartOfSpeechTagger, SyntacticAnalyser, SemanticAnalyser, CommandGenerator合計 5 ( ) 個のユーティリティ クラスのインスタンスが作成されます。

上記の実装を最適化するserviceために、各ユーティリティのクラスを作成できます。serviceclass はデフォルトSingletonで. サーバーごとに 1 つのインスタンスのみが作成されます。したがって、アプリケーション全体でユーティリティ サービスのインスタンスが 5 つになります。

または、ユーティリティ クラスを明示的に Singleton にします。

あなたにとって興味深いかもしれない単なる考え。

于 2013-04-28T15:58:30.800 に答える