【发布时间】:2017-01-05 01:13:40
【问题描述】:
所以我正在开发一个辅助项目 Web 应用程序,它可以让您在一个网站上跟踪来自多家公司的包裹。即您可以输入任何跟踪号,服务器将检查其格式并输出相应的跟踪信息。
Click here to see my file directory!
我决定继续使用策略模式和外观,因为我认为它可以很好地服务于应用程序的目的。
以上是我目前的回购。
结构是:
Client -> DeliveryFacade -> DeliveryController -> TrackingInterface -> 各种公司 API(FedEx、CanadaPost、UPS)。
我目前正在开发 DeliveryController,并且在开发时遇到了一些臭代码。
就是这样:
export default class DeliveryController{
/** Checks the format of tracking number to determine the shipping company it
* has been given. If the tracking number is able to be validated, then return
* the correct shipping company. If it is not able to be validated (not a string), return
* null.
*
* @params trackingNumber : string
* @return shippingCompany : string
*
* e.g. returns "Fedex" , "CanadaPost", "UPS"
* */
public checkFormat(trackingNumber : string) : string{
if (typeof trackingNumber == "string" || trackingNumber instanceof String) {
// CanadaPost
if (/{regex}/.test(trackingNumber)){
return "CanadaPost";
}
// FedEx
if (/{regex}/.test(trackingNumber)) {
return "FedEx";
}
// UPS
if (/{regex}/.test(trackingNumber)) {
return "UPS";
}
}
else return null;
}
/** Processes a tracking number and returns a deliveryInfo.
* @param trackingNumber
* @return deliveryInfo
*/
public process(trackingNumber : string) : deliveryInfo{
var company = this.checkFormat(trackingNumber);
switch (company){
case "CanadaPost":
break;
case "FedEx":
break;
case "UPS":
break;
}
return /*some deliveryInfo*/;
}
我的问题是:有什么方法可以消除每个策略的明显重复?
如果我想从一种新型公司添加新的跟踪号格式,我必须在我的跟踪策略文件夹中添加一个新类,然后我必须将案例添加到 checkFormat 和处理(这显然是未完成的)。
我可以使用某种抽象形式来避免这种情况吗?
【问题讨论】:
标签: javascript design-patterns abstraction repeat