我为一家保险经纪人工作,我在此处实施的一件事是一种报价服务,它将客户的详细信息作为输入,并提供多家保险公司的报价列表作为回应。循环通过子类还是有更好的方法吗?
目前,它的工作原理如下:
- 索引页接收报价数据的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