모델과 뷰 모델 간의 상호 작용은 어떻게되어야합니까?
뷰 모델은 뷰에 데이터를 설명합니다. 이것은 프리젠 테이션 로직 및 뷰에 데이터를 제공하기위한 것입니다. 모델은 SQL 또는 파일과 같은 데이터 소스의 데이터를 설명하기위한 것입니다. 뷰 모델에서 물건
예 : 귀하의 모델
public class Customer
{
public long? Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public DateTime? DateOfBirth { get; set; }
}
나는 유지 보수를위한 기능으로 논리를 그룹화하려고 할에서 물건
public class CustomerViewModel
{
public long Id { get; set; }
public bool IsFoundingMember { get { return Id < 1000; } }
public string Name { get; set; }
public bool IsABaggins { get { return !string.IsNullOrWhiteSpace(Name) ? Name.EndsWith("Baggins") : false; } }
}
예.
말 :
ActionResult Save(CustomerModel cm)
{
if(!ValidateCustomerModel(cm))
{
//Deal with invalid data
}
UpdateCustomer(cm);
//continue
}
public bool ValidateCustomerModel(CustomerModel model)
{
//Do stuff
return true;
}
public void UpdateCustomer(CustomerModel model)
{
Customer c = new Customer();
c.Id = cm.Id;
c.Email = cm.Email;
context.Entry<Customer>(c).State = System.Data.EntityState.Modified;
context.SaveChanges();
}
당신이 당신의 CRUD 로직을 모두 설정 한 후
당신이 그 논리에 대한 몇 가지 클래스를 만들어 단결, Ninject에, 또는 일반 오래된 생성자 주입으로 볼 수 있었다 밖으로 분리.
생성자 주입
public class MyController : Controller
{
private readonly ICustomerDL _customerDL;
public MyController(ICustomerDL customerDL)
{
_customerDL = customerDL;
}
//Load your implementation into the controller through the constructor
public MyController() : this(new CustomerDL()) {}
ActionResult Save(CustomerModel cm)
{
if(!ValidateCustomerModel(cm))
{
//Deal with invalid data
}
_customerDL.UpdateCustomer(cm);
//continue
}
public bool ValidateCustomerModel(CustomerModel model)
{
//Do stuff
return true;
}
}
public interface ICustomerDL
{
void UpdateCustomer(CustomerModel model);
}
public class CustomerDL : ICustomerDL
{
public void UpdateCustomer(CustomerModel model)
{
Customer c = new Customer();
c.Id = cm.Id;
c.Email = cm.Email;
context.Entry<Customer>(c).State = System.Data.EntityState.Modified;
context.SaveChanges();
}
}
이점은 논리의 모든 깨끗하고 단위 테스트 및 코드 유지 보수 바람을 것이다 구성 될 것입니다.
괜찮아요. 나는 로직 (유효성 검사, 물건을 데이터베이스에 저장하는 것)을 유지 보수를위한 함수로 분리하고 Unity와 같은 의존성 삽입을 사용하지만 꽤 깨끗해 보인다. – Romoku
'CustomerModel'은 뷰 모델이고'Customer'는 모델입니까? 어떤 종류의 상호 작용 * 당신이 그들 사이에 보입니까? –
아마도 상호 작용은 단어의 나쁜 선택 이었지만 그 생각은 의심의 여지가 명확하지 않습니까? –