2017-02-09 4 views
4

그래서 나는 상황에 따라 실행할 클래스가 들어있는 데이터베이스를 가지고 싶습니다. 다음과 같이 보일 것입니다 :반영하지 않고 실행할 클래스를 결정할 수 있습니다.

id | Description  | pricingClass 
1 | "static pricing" | staticDeliveryPrice.class 
2 | "Dynamic pricing" | dynamicDeliveryPrice.class 

내 코드의 유연성을 허용하기위한 것입니다. 내 사고 방식은 배달 방법의 가격을 파악하는 방법을 여러 가지 방법으로 결정할 수 있다는 것입니다.

내가 걱정하는 문제는이 시나리오에서 사용하기에 좋지 않습니까? 그것을 할 수있는 더 좋은 방법이 있습니까? 그것은 견고한 원칙을 따르고 있습니까 (나는 그렇다고 말하고 싶지만, 나에 대해서는 동의하지 않습니다).

+1

왜 기본 DeliveryPrice 클래스를 만들고 DynamicDeliveryPrice 클래스와 StaticDeliveryPrice 클래스를 확장하여 고유의 전달 메소드를 구현해야합니다. 동일한 메소드를 호출하는 DeliveryPrice 객체가 포함 된 데이터 구조 만 있으면됩니다. 왜 모든 작업이 객체 유형을 문자열/클래스에 매핑합니까? –

+1

반사가 나쁘지 않습니다. 필요한 경우 사용하십시오. – ZhongYu

+0

@RAZ_Muh_Taz 모든 deliveryClass가 인터페이스를 사용하여 메소드를 미리 정의 할 계획입니다. 그러나 나는 여전히 배달 물량을 결정하기 위해 가격 객체가 필요합니까? – Harry

답변

7

당신은 플러그인 기반 아키텍처에 대해 설명합니다. 정말에 유연성이 필요합니까?

  • 외부 프로젝트가 개입하면 프로그램의 런타임 수정을 허용 할
  • 없이 코드에 새로운 기능을 추가해야 할 때 그것은 일반적으로 필요가있다.

그렇지 않으면 완전히 과잉입니다. 제품의 내용을 완벽하게 제어 할 수 있으므로 좋은 이전 다형성에 의존하여 여러 가지 기능 구현을 분리 할 수 ​​있습니다.

또한 비즈니스 로직을 데이터베이스에 두는 것은 좋지 않습니다. 우려 사항을 혼합하고 강력한 커플 링을 만들면 (갑자기 클래스 이름을 변경하면 성가 시게됩니다!), 물론 어떤 일이 일어나는지에 대해 추론하기가 더 어렵습니다. 코드를 보면서 코드를 작성하십시오.

+0

의견을 보내 주셔서 감사합니다. 왜 필요한지 쓴 것을 기쁘게 생각합니다. 왜냐하면 내가하려는 일에 대해 유효성을 검사하기 때문입니다. 내 사용자 시나리오에서는 런타임에 전달 방법을 변경하고 다른 "클라이언트"가 정확한 비용을 지정하고 프로그램이 제품과 상호 작용하는 방식을 지정할 수 있기를 원합니다. – Harry

관련 문제