在這裏你去
我們將首先創建一個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