我有存储在一个文本文件,下面的模板:如何重构此代码以使其更通用?
您好,感谢您购买的{一年} {使} {}模型。
year, make, and model
进来存储在template configuration table
和实际值存储在一个Car table
。
目前,我得到的是模板(year, make, and model)
使用,然后我从Car
表对他们的价值观和我更换令牌({year}, {make}, {model})
与数据库中的值的所有领域,所以它最终看起来像东西:
你好,感谢购买2013年本田思域。
这是所有罚款时,一切都从Car
表,因为如果模板添加需要一个新的领域,像{color}
,我只是将它添加到template configuration table
和一切工作和template configuration table
是每个用户,所以如果一个用户不希望{color}
,这可以很容易地完成。我遇到的问题是当数据没有从Car
来,但可能会从其他表来,例如:
您好,感谢您购买的{一年} {使} {}模型。
您的订单号为{} order_no,你可以联系{} customer_service_number
客户服务,如果您有任何问题。
对于此示例的目的,让我们假设{order_no}
来自一个orders
表和{customer_service_number}
来自一个CustomerService
表。
我想有这样的方法:
var text = @"Hello, Thanks for Buying the {year} {make} {model}.
Your order number is {order_no} and you can contact customer service at {customer_service_number} if you have any problems.";
//This is for fields that are found directly on the Car object
foreach(var field in templateFields)
{
var val = car.GetType().GetProperty(field).GetValue(car,null);
text = text.Replace(field, val);
}
//Replace other fields
var order_no = order.GetOrderNo();
text = text.Replace("{order_no}",order_no);
var customer_service_number = customerService.GetCustomerServiceNumber();
text = text.Replace("{customer_service_number}",customer_service_number);
,如果每个人都希望看到的附加字段中的上述工作正常,但如果只有几个用户希望看到的order_no and/or the customer_service_number
一部分,然后调用一个或者两者都没有意义。
此外,如果客户希望看到产生额外的信息,那我也有像另一个电话:
text = text.Replace("{number_of_oil_changes}",car.NumberOfOilChanges);
然后我结束了一堆根据不同的客户有用的和/或无用的方法,那么如何避免必须编写所有这些额外的方法来获取依赖于客户的信息?
为什么客户*不想*看到所有的信息? –
@DanTeesdale - 这是一个简单的例子,但让我们只是说,有些人不会为额外的信息开车,有些人会这样做。 – xaisoft
似乎更适合[codereview.se] – millimoose