0

ORM을 사용할 때 계산에만 사용되는 몇 가지 비 영구 속성이있는 모델 클래스를 사용하는 것이 좋으며 안전하게 삭제할 수 있습니까?엔티티에 비 지속 변수가 있으면 괜찮습니까?

제품이 있다고 가정 해 보겠습니다. 이 제품에는 가능한 옵션 목록이 있습니다. 옵션은 제품에 가격 영향을 미칠 수 있습니다. 또한 하나의 옵션을 선택하면 다른 옵션의 가격이 변경된다는 규칙 세트가 있습니다.

옵션을 선택하면 주문에 제품을 추가 할 때 먼저 선택한 각 옵션에 영향을주는 규칙에 따라 모든 옵션의 가격을 다시 계산해야합니다. 그런 다음 선택한 모든 옵션을 사용하여 제품의 최종 가격을 계산할 수 있습니다.

이 예제에서 Option에는 선택한 옵션의 컨텍스트 내에서만 의미가있는 calculatedPrice 속성이있을 수 있으며 제품이 Order에 추가 된 후 안전하게 삭제 될 수 있습니다.

이 문제에 대해 생각하는 더 정확한 방법이 있습니까?

답변

1

예, 완벽하게 @Transient 속성을 갖는 것이 좋습니다.

일부 사람들은 잘못 생각할 수 있으며 엔티티와 거의 같은 별도의 클래스를 가졌으나 추가 필드가 있어야하지만 이는 불필요한 코드 중복입니다. 당신의 접근 방식은 내가하는 일입니다.

+0

나는 그 이름조차 기쁘다! 감사. – Benjamin

1

크고 무시 무시한 전자 상거래 시스템에서 사용되는 다른 접근법은 계산 된 정보를 포함하는 일시적인 객체의 병렬 구조를 갖는 것입니다. 따라서 Order와 병행하여 OrderPrice가 있습니다. 순서의 각 Item에는 ItemPrice가 있습니다. Item에 Options 세트가 있으면 ItemPrice에 OptionPrices 세트가 있습니다. 주문의 ShippingOption에도 ShippingPrice가 있습니다. 가격 결정은 가격 계산기의 또 다른 병렬 구조에 의해 처리됩니다. OrderPriceCalculator에 Order를 주면 OrderPrice를 돌려줍니다. 그렇게하면 ItemPriceCalculator에 각 Item을 보냅니다. ItemPriceCalculator는 각 Option을 OptionPriceCalculator로 보냅니다.

가격 개체는 주문 개체를 참조 할 수 있지만 그 반대는 마찬가지입니다. 우리 시스템은 실제로 가격을 유지하지만 주문과는 별도로 유지됩니다.

이점은 주문 내용을 설명하고 주문 가격을 설명하며 주문 가격을 계산한다는 것입니다.

단점은 엄청난 수의 클래스가 있으며 필요한 정보가 필연적으로 손에 들고있는 객체에 없다는 것입니다.

단점은 장점보다 클 것입니다.

+0

이 상세한 답변 해 주셔서 감사합니다! – Benjamin

관련 문제