クリンゴン語翻訳サービス


ストーリー

この演習では、TranslationServiceを実装します。これは、有料会員に一定の品質保証を提供するためのものです。

どんな翻訳の_リクエスト_も、それなりの時間でこなしてくれる魔法の翻訳APIを見つけたので、なんとかこれを活用したいと考えています。

この魔法のAPIのインターフェースは、ごく最小限です。

翻訳を取得する

api.fetch(text)はtextの翻訳を取得し、2つの値を返します。

  • translation: 実際の翻訳
  • quality: 数値で表された品質

まだリクエストされていないなど、利用できる翻訳がない場合、APIはエラーを投げます。翻訳できないテキストの場合も同じです。

翻訳をリクエストする

api.request(text, callback)はtextの翻訳をリクエストし、準備ができると値を返さずにcallbackを呼び出します。

request APIは不安定なので、ときにエラー付きでcallbackが呼ばれることがあります。その場合は、もう一度リクエストしてかまいません。

⚠警告!⚠

以前のユーザーが手抜きをして、すでに翻訳済みかどうかを確認もせず、いつも翻訳をリクエストしていたため、APIはすでに翻訳済みのテキストに対してエラーを返し、すべてのアクセスを永久に完全にブロックしてしまいます。

タスク

翻訳サービスのストーリーに合うタスクの例を挙げます。

  • 翻訳を取得し、品質は無視する
  • 翻訳をまとめて取得する(オール・オア・ナッシング)
  • 翻訳をリクエストし、最大2回まで再試行する
  • 翻訳を取得して品質を調べる、またはリクエストする

用語

これらは、説明文(スタブのコメントを含む)で繰り返し使われる用語についての推奨であり、規則ではありません。

  • _注入される依存関係_はTranslationService、つまりAPIと呼びます
  • このサービスは非同期ですが、そのことには一切触れません
  • Futureの失敗は、APIがエラーを投げます
  • Callbackの失敗は、APIがcallbackをエラー付きで呼び出します

翻訳テキストはすべて、クリンゴン語から英語への翻訳です。

実装

参考資料

備考

'arlogh Qoylu'pu'?の正しい翻訳は、**How many times has it been heard?**です。