我有以下存储在文本文件中的模板:
您好,感谢您购买 {year} {make} {model}。
year, make, and model
come 存储在 atemplate configuration table
中,实际值存储在 a 中Car table
。
目前,我获取要在模板中使用的所有字段,(year, make, and model)
然后从Car
表中获取它们的值,并用数据库中的值替换令牌({year}, {make}, {model})
,所以它最终看起来像这样:
您好,感谢您购买 2013 年本田思域。
当一切都来自Car
表时,这一切都很好,因为如果模板添加需要一个新字段,例如{color}
,我只需将它添加到template configuration table
并且一切正常,并且template configuration table
每个用户都是,所以如果一个用户不想要{color}
,那可以很容易地完成. 我遇到的问题是数据不是来自Car
,但可能来自其他表,例如:
您好,感谢您购买 {year} {make} {model}。
您的订单号是 {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);
然后我最终得到了一堆有用和/或无用的方法,具体取决于客户,那么我怎样才能避免编写所有这些额外的方法来获取依赖于客户的信息?