【发布时间】:2012-10-05 05:12:36
【问题描述】:
我必须为客户生成账单,但根据他们居住的地方,账单包含几乎相同的数据,但它们的格式却大不相同。我想了几种方法来处理这个问题,例如:
public void GenerateBill(User user)
{
if(user.Location == "blah blah")
{
//Code specific to this location
}
else if (user.Location == "dah dah")
{
//Code specific to this location
}
}
上面的方法看起来会很长,尤其是当不同位置的新用户不断出现时。我想过做类似的事情:
public void GenerateBillForUserInBlah();
public void GenerateBilForUserInDah();
但上述情况似乎也会失控,成为维护的噩梦。
我的另一个想法是使用IGenerateBill 之类的接口,然后执行以下操作:
class UserInBlah : IGenerateBill
{
//Implement IGenerateBill members
}
但在上面,我必须为每个用户创建一个类。我可能仍然需要执行上述操作,但我认为如果 Managed Extension Framework 在这里有用的话。有替代解决方案吗?主要问题是直到运行时我才知道用户的位置,所以我必须在运行时根据用户的位置调用正确的方法。
【问题讨论】:
-
格式有何不同?您能否将更改范围缩小到类别,然后根据客户的位置进行混搭?
-
格式非常不同。除此之外,一些取决于位置的账单包含或多或少的数据。
-
嗯。老实说,除非您有意尝试学习新技术或其他东西,否则 if 语句(或开关)的第一件事似乎是一个非常现实且易于实施的解决方案。我真的不认为它会很难维护或添加。
-
我不认为维护是一场噩梦,你可以通过使用字典来避免 if else 子句,我会参考选项 1
-
@CuongLe - 我刚刚提到了 2 个用户,但是如果你要处理 60 个位置,例如,你必须为每个位置维护一个 if 或 switch 案例,或者在你的案例中,你提到了字典,你会怎么做?
标签: c# design-patterns .net-4.0 mef