使用不同存储库填充ViewModel的最佳实践

时间:2012-11-08 16:43:11

标签: asp.net-mvc viewmodel

我正在尝试找出执行此代码的最佳方法 (因为我认为,我的方式锁定不好): 我试图让它变得容易理解这个问题。

public ActionResult Index()
{
var user=new User();
user.load(1);
return View(user);
}

load(int id )
{
//pseudocode:
//1. load user from repository1     
//2. load address from repository2
//3.load payments from repository3
}

1 个答案:

答案 0 :(得分:0)

你去吧

我们首先要创建一个UserModelService,如下所示

public class UserModelService
{
    public User Load(int id)
    {
        var userRepository = new UserRepository();
        var user = userRepository.Load(id);

        var addressRepository = new AddressRepository();
        user.Address = addressRepository.LoadForUserId(id);
        return user;
    }
}

然后我们将修改控制器中的原始代码,如下所示

public ActionResult Index()
{
    var userModelSerice =new UserModelService();
    var user = userModelService.load(1);
    return View(user);
}

以上所有剩余的代码参考如下

public class AddressRepository
{
    public Address LoadForUserId(int id)
    {
        // Load the address for given user id
    }
}

public class UserRepository
{
    public User Load(int id)
    {
        // Load and return user
    }
}

public class User
{
    public Address Address { get; set; }
}

public class Address
{
}

现在在您的控制器操作中,您可以通过构造函数注入它,而不是创建UserModelService的新实例。类似的原则可以应用于将存储库注入UserModelService,但这将是另一个重要的讨论,所以我会在这里缩短自己。