안녕하세요, 코드의 일부를 리퍼 팩터로 열거 나 닫힌 원칙에 부합하도록 지정했습니다. 두 가지 방법으로 전략 패턴을 적용했지만 나는 어떻게해야할지 모르겠다. 이 방법은이 방법이 수정을 위해 닫혀 있지 서있는 class.As의 방법을 사용하여 객체를 initialezes이 경우메서드에서 열기/닫기 원칙 적용
public ProductPriceCalculator(Product product)
{
this.product = product;
buyerStrategy = new BuyerStrategy();
discountStrategy = new DiscountStrategy();
}
public Price CalculatePrice()
{
price = new Price();
decimal productPrice = product.BasePrice +
(product.BasePrice * product.Addition);
decimal TVA = CalculateTVA();
price.ProductPrice = productPrice*TVA;
decimal discount = CalculateDiscount(price.ProductPrice);
price.Discount = price.ProductPrice * discount;
price.ProductPriceWithDiscount = price.ProductPrice - price.Discount;
price.TransportPrice = product.Transport.GetTransportPrice();
price.TotalPrice = price.ProductPriceWithDiscount + price.TransportPrice;
return price;
}
어떤 점에서 나는 또 다른 속성을 추가해야하는 경우 내가해야 할 가격 때문에 초기화하려면 여기로 돌아 오십시오.
어떻게이 코드를 올바르게 구성 할 수 있습니까?
나는 귀하의 우려를 정말로 이해하지 못합니다. 가격 클래스가 다른 속성을 얻는 경우 Price 생성자에서 초기화해야합니다. 계산 된 값이 필요한 경우 계산을 수정해야합니다. 하지만 어딘가에 코드가 있어야하고 코드를 수정해야합니다. O/C 원칙은 현재 가격 계산기를 새로운 가격 계산기로 교체 할 가능성이 있으므로 아마도이 제품에서 파생 된 것일 수 있습니다. 이 문서에서 제대로 파생 될 수 있는지 확인하십시오. – nvoigt
@noveigt 자세한 내용은 파생 된 계산기를 투명하게 사용할 수있는 가능성이 [Liskov Substitution Principle] (http://en.wikipedia.org/wiki/Liskov_substitution_principle)과 더 관련이 있다고 말할 수 있습니다. 열기/닫기 원칙은 원래 Calculator 클래스의 코드를 수정하지 않고도 상속을 통해 계산기 기능을 확장 할 수 있다는 사실에 더 가깝습니다. – Marshall777