我的任何数据访问的标准布局涉及一个很好的简单接口。异步访问的数据接口
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);
}
}
非常感谢。如果我没有使用.Net的最新版本,我会如何处理这个问题。我正在使用Xamarin进行项目工作,iOS和Android的异步仅在预览中。 http://blog.xamarin.com/brave-new-async-mobile-world/ – fluent
@fluent:试试我编辑的答案。我没有碰过单声道btw –