私はかなり検索しましたが、疎結合でASP.NETMVCアプリのようなものでリポジトリパターンを使用して外部REST Webサービスを使用する良い例は見つかりませんでしたオンラインで見つけたリポジトリパターンのほとんどすべての例は、SQLデータの書き込みまたはORMの使用です。HttpClientを使用してリポジトリにラップされたデータを取得する例をいくつか見てみたいと思います。
良い例への言及はありますか?または、誰かが簡単な例を書けますか?
簡単な例:
// You need interface to keep your repository usage abstracted
// from concrete implementation as this is the whole point of
// repository pattern.
public interface IUserRepository
{
Task<User> GetUserAsync(int userId);
}
public class UserRepository : IUserRepository
{
private static string baseUrl = "https://example.com/api/"
public async Task<User> GetUserAsync(int userId)
{
var userJson = await GetStringAsync(baseUrl + "users/" + userId);
// Here I use Newtonsoft.Json to deserialize JSON string to User object
var user = JsonConvert.DeserializeObject<User>(userJson);
return user;
}
private static async Task<string> GetStringAsync(string url)
{
using (var httpClient = new HttpClient())
{
return await httpClient.GetStringAsync(url);
}
}
}
ここ はNewtonsoft.Json
パッケージを入手する場所/方法です。
もう1つのオプションは、HttpClient
オブジェクトを再利用してリポジトリをIDisposable
にすることです。これは、HttpClient
の処理が終わったら破棄する必要があるためです。私の最初の例では、HttpClient
ステートメントの最後のusing
使用の直後に発生します。