私の標準的なデータ アクセスのレイアウトには、素晴らしくシンプルなインターフェイスが含まれます。
public interface IUserDao
{
User GetUser(int userId);
}
次に、単体テスト用にデータ層の別の実装に切り替えることができます。標準的な使用法は、MVP のプレゼンターから、データをビューにプッシュするなどの簡単なことを行うことです。
public void UserSelected(int userId)
{
User user = daoFactory.UserDao.GetUser(userId);
view.FirstName = user.FirstName;
view.LastName = user.LastName;
}
この場合、データ アクセスは非同期で完了する必要があります。非同期呼び出しの要件がデータ インターフェイスにまで及ぶ必要があるかどうかは、よくわかりません。
例えば
public interface IUserDao
{
void GetUserBegin(int userId);
User GetUserEnd();
}
インターフェイスを変更する必要がありますか、それとも非同期アクセスの要件は呼び出しコードの実装の一部ですか?
編集 :
私の簡単な例が役立つと思っていましたが、実際には混乱を引き起こしている可能性があります。私はRestSharpを使用して必要なデータを取得しており、非同期部分を適切に処理しています。私がうまくいかないのは、テスト中に切り替えることができるように、このロットの周りにインターフェイスをラップする方法です。
public UserDao : IUserDao
{
public void GetUser(int userId)
{
var request = new RestRequest("User/GetUser/{id}", Method.POST);
// replaces matching token in request.Resource
request.AddUrlSegment("id", id.ToString());
//Create the client
var client = AuthenticatedRestClient();
//Execute
client.ExecuteAsync(request, response =>
{
ProcessUser(response);
});
}
public static void ProcessUser(IRestResponse response)
{
//Extract the user from the reponse
User user = (User)ProcessResponse<User>(response);
}
}