我爲一家保險經紀人工作,我在此處實施的一件事是一種報價服務,它將客戶的詳細信息作爲輸入,並提供多家保險公司的報價列表作爲迴應。循環通過子類還是有更好的方法嗎?
目前,它的工作原理如下:
- 索引頁接收報價數據的JSON字符串反過來
- 報價數據被髮送到每個保險公司的計算腳本 - 這些腳本在指數數組上市 頁
- 各保險人的計算諮詢數據庫表,看看哪些利率的設定可以使用給定的數據發送到特定的腳本,該保險將開始
- 日期和速度產生d並返回到索引
- 索引中的排序結果按升序排列,將它們作爲一個JSON字符串到發送方
這種解決方案的問題是:
- 難以測試 - 每套價格都是單一的代碼塊,因此不能單獨進行測試
- 難以維護 - 爲保險公司增加一組新的費率涉及將當前費率複製到新腳本中,m進行必要的更改,並在數據庫表中創建一個新條目,其中包含新費率的開始日期。這反過來又導致:
- 大量率 之間的重複代碼的
我的新的部分形成的解決方案是有一個主Quoteservice
類,其中包含常見的功能,所有的報價,無論保險人或產品和Insurer1
,Insurer2
等。從索引頁面調用的子類獲得報價。這些反過來會對每組費率都有小類(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;
}
}
似乎有趣,但你可以使用一些代碼片斷和示例數據緩解理解 – 2012-07-30 11:41:54
@RupeshPatel我添加一些代碼給的我在想什麼的想法。 – Gareth 2012-07-30 12:08:19