재사용 가능한 비즈니스 오브젝트를 사용할 때 뷰 모델을 빌드 할 때 가장 좋은 방법은 무엇입니까?
우리는 Builder
뷰 모델을 구축하기 위해 호출하는 객체를 사용합니다 . 각 논리적 뷰 단위 (주문, 사용자 등)에 대해 하나의 빌더로, 각 단위는 여러 가지 다른 뷰 모델을 포함 할 수 있습니다 (주문에는 요약, 오더 라인 등이 포함됨).
빌더는보기 모델을 빌드하기 위해 하나 이상의 표준 비즈니스 오브젝트를 통해 데이터를 가져올 수 있습니다.
뷰 모델에서 비즈니스 오브젝트 / 모델을 사용할 때 더 나은 방법은 무엇입니까?
접근법 1
뷰 모델에서 비즈니스 오브젝트를 사용할 수 있습니까?
//Business object in some library
public class Order
{
public int OrderNum;
public int NumOrderLines;
//...
}
//Order builder in website
public class OrderBuilder
{
public OrderSummary BuildSummaryForOrder(int OrderNum)
{
Some.Business.Logic.Order obOrder = Some.Business.Logic.GetOrder(OrderNum);
//Any exception handling, additional logic, or whatever
OrderSummary obModel = new OrderSummary();
obModel.Order = obOrder;
return obModel;
}
}
//View model
public class OrderSummary
{
public Some.Business.Logic.Order Order;
//Other methods for additional logic based on the order
//and other properties
}
접근법 2
비즈니스 오브젝트에서 필요한 데이터 만 가져옵니다.
//Business object in some library
public class Order
{
public int OrderNum;
public int NumOrderLines;
//...
}
//Order builder in website
public class OrderBuilder
{
public OrderSummary BuildSummaryForOrder(int OrderNum)
{
Some.Business.Logic.Order obOrder = Some.Business.Logic.GetOrder(OrderNum);
//Any exception handling, additional logic, or whatever
OrderSummary obModel = new OrderSummary()
{
OrderNum = obOrder.OrderNum,
NumOrderLnes = obOrder.NumOrderLines,
}
return obModel;
}
}
//View model
public class OrderSummary
{
public int OrderNum;
public int NumOrderLines
//Other methods for additional logic based on the order
//and other properties
}
두 가지 장점과 단점을 볼 수 있지만 허용되는 접근법이 있는지 궁금합니다. 접근법 1에서는 모델을 중심으로 코드를 복제하지 않지만 비즈니스 로직에 대한 종속성을 만듭니다. 접근법 2에서는 뷰에 필요한 데이터 만 가져 오지만 모델 주위에 코드를 복제합니다.