克林貢翻譯服務


故事

在這個練習中,你會提供一個 TranslationService,讓付費會員享有某種品質保證。

你發現了一個神奇的翻譯 API,它能在合理的時間內完成任何翻譯請求,而你想好好利用這一點。

這個神奇的 API 介面非常精簡:

取得翻譯

api.fetch(text)會取得text的翻譯,並回傳兩個值:

  • translation:實際的翻譯
  • quality:以數字表示的品質

如果沒有可用的翻譯(因為還沒有人請求過),API 就會拋出錯誤。如果某段文字無法翻譯,也會發生這種情況。

請求翻譯

api.request(text, callback)會請求text的翻譯,並在準備好之後呼叫callback,不帶任何值。

request API 並不穩定,這表示有時 API 會以錯誤呼叫callback。如果發生這種情況,可以重新請求。

⚠ 警告!⚠

由於一些先前的使用者在寫程式時偷懶,總是一再請求翻譯,甚至不檢查文字是否已經翻譯過,所以如果文字已經翻譯過,API 就會回傳錯誤,並永遠徹底封鎖所有存取。

任務

以下是一些符合這個翻譯服務故事的任務範例:

  • 取得翻譯,忽略品質
  • 批次取得翻譯,全部成功或全部失敗
  • 請求翻譯,最多重試 2 次
  • 取得翻譯、檢查品質,或直接請求翻譯

術語

以下是對說明中反覆出現的術語(包括 stub 註解)的建議,而非規則。

  • 被注入的依賴稱為 TranslationService,或簡稱 API
  • 這個服務是非同步的,但從不提及這點
  • Future 失敗時,要說成 API 會拋出錯誤
  • Callback 失敗時,要說成 API 會以錯誤呼叫 callback

所有的翻譯文字都是從克林貢語翻成英文。

實作

參考

備註

'arlogh Qoylu'pu'? 的正確翻譯是 How many times has it been heard?。