나는 보험 중개인을 위해 일하고 있으며 여기에 제가 구현 한 것들 중 하나는 고객의 내용을 입력으로 받아들이고 여러 보험 회사에 대한 견적 목록을 응답으로 제공하는 견적 서비스입니다. - 이러한 스크립트는 인덱스의 배열에 나와있는하위 클래스를 반복하거나 더 좋은 방법이 있습니까?
- 인덱스 페이지는
- 인용 데이터가 차례로 각 보험사의 계산 스크립트로 전송 된 JSON 문자열에 인용 데이터를 수신 다음과 같이
그것은 현재 작동 페이지
- 각 보험사의 계산이 데이터가 특정 스크립트로 전송되는 보험
- 를 시작 날짜를 지정 사용해야 요금의 어떤 설정을 참조하는 데이터베이스 테이블을 협의하고 속도는 생성이다 D 및 인덱스
- 인덱스를 반환 오름차순으로 정렬 결과 및 발신자 용액의 문제점
에 JSON 문자열로로 리턴하는 단계이다 :
- 테스트하기가 어렵다 - 각 속도 집합은 모 놀리 식 코드 블록이므로 조각을 개별적으로 테스트 할 수 없다.
- 유지 보수가 어렵다 - 보험자에게 새로운 속도 집합을 추가하는 것은 현재 속도를 새로운 스크립트에 복사하는 것이다. m 필요한 변경을 요구하고 새 요율의 시작 날짜와 함께 데이터베이스 테이블에 새 항목을 작성합니다. 차례로 이것은 리드 : 요금 사이의 코드 중복의
- 많은 나의 새로운 부분적으로 형성 솔루션은 보험 회사 또는 제품과
Insurer1
,Insurer2
등에 관계없이 모든 따옴표에 공통 기능을 포함하는 주요Quoteservice
클래스를 가지고있다
인덱스 페이지에서 호출하여 견적 비율을 얻는 하위 클래스. 이것들은 각 속도 집합 (Insurer1May2012
, Insurer1July2012
등)에 대한 서브 클래스를 갖습니다. 내 문제는 시작일에 대해 올바른 비율을 선택하는 데이터베이스 테이블의 필요성을 없애려는 데있다.
내가
$quoteresults=array();
$quoteresults=array_merge(Insurer1->getQuote($quotedata), $quoteresults);
$quoteresults=array_merge(Insurer2->getQuote($quotedata), $quoteresults);
을 말할 수 있기를 각각 InsurerX
객체가 시작 날짜에 따라 올바른 서브 클래스 (InsurerXMay2012
, InsurerXJuly2012
등)를 사용하는 거라고 - 아마 각 함수 getStartdate()
를 호출하여 서브 클래스의 레이트가 시행되었을 때의 일자 (또는 타임 스탬프)를 돌려주는 서브 클래스의 불행히도, 클래스의 하위 클래스를 순환하는 가장 좋은 방법을 찾은 후에 이것이 최선의 방법이 아닐 수도 있습니다.
궁극적 인 목적은 복수 파일 및/또는 데이터베이스 테이블을 변경하지 않고 요금 변경을 위해 Insurer1Sept2012
유형의 하위 클래스 하나를 추가하는 것입니다.(이전 요금을 덮어 쓰기하는 것은 선택 사항이 아닙니다 - 조정 과정은 그들이 대체 한 후 최대 12 개월 동안 요금을받을 수 있어야합니다) 내가 일하는 새로운 버전을 확인하는 방법
예
abstract class Quoteservice
{
// Various common functionality here...
}
class Insurer1 extends Quoteservice
{
public function getQuote($quotedata)
{
$subclass=null;
// This is the bit I'm not sure of...
// Maybe something like:
foreach($subclasses as $thissubclass)
{
$subclassstart=$thissubclass->getStartdate();
// Ignore all start dates greater than proposed start date
if($subclassstart < $quotedata['startdate'])
{
$subclasses[$subclassstart]=$thissubclass;
}
}
ksort($subclasses);
$subclass=array_pop($subclasses);
return $subclass->getQuote()
}
}
class Insurer1May2012 extends Insurer1
{
public function getStartdate()
{
return 1335830400; // unix time stamp for 1st May 2012
}
public function getQuote($quotedata)
{
// Calculate May's rate here...
return $quoteinfo;
}
}
class Insurer1July2012 extends Insurer1
{
public function getStartdate()
{
return 1341100800; // unix time stamp for 1st July 2012
}
public function getQuote($quotedata)
{
// Calculate July's rate here...
return $quoteinfo;
}
}
재미있는 것 같다하지만 당신은 내가 생각하고 무엇의 아이디어를 제공하기 위해 몇 가지 코드를 추가 한 이해를 –
@RupeshPatel을 용이하게하기 위해 좀 더 코드 조각 및 예제 데이터를 사용할 수 있습니다. – Gareth