我正在尝试找出执行此代码的最佳方法 (因为我认为,我的方式锁定不好): 我试图让它变得容易理解这个问题。
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
}
答案 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
,但这将是另一个重要的讨论,所以我会在这里缩短自己。