在这里你去
我们将首先创建一个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
,但这将是另一个大讨论,所以我在这里将自己缩短。
你现在这样做的方式有什么问题? – Suhas
ViewModel包含DB代码/逻辑代码。通常,ViewModel不应该包含逻辑代码。我经常阅读这个。 – boqus
那是我正在寻找的答案。在那种情况下,只需将代码重构为它自己的类。我通常将这些类命名为模型服务。所以在你的情况下,它会是'UserModelService'。并将'UserModelService'作为依赖项注入到您的控制器中 – Suhas