0

我正在尝试找出执行此代码的最佳方法(因为我认为,我的方式锁定不好):我试图使其易于理解问题。

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
}
4

1 回答 1

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但这将是另一个大讨论,所以我会在这里打断自己。

于 2012-11-11T17:50:42.517 回答