我有一个带有(嵌套)属性的类,这些属性定义物理现实世界对象的配置。出于保密目的,我无法显示实际代码,因此假设它是车辆。
public class Vehicle
{
public FuelTank FuelTank { get; set; }
public IList<Tire> Tires { get; set; }
}
我想创建一组说明,以查看车辆的性能,并在满足条件时进行任何更改。
假设轮胎胎面深度小于3毫米,更换了汽车的轮胎,并将费用项目添加到了帐单中。
foreach (var tire in vehicle.Tires)
{
if (tire.Tread < 3)
{
ReplaceTire(tire);
AddToBill("New tire", "$99");
}
}
我可以将这种逻辑放在一个花哨的类中,该类可以作为应用于汽车的维修包:
public class VehicleRepairPackage
{
private Vehicle _vehicle;
private Bill _bill;
public VehicleRepairPackage(Vehicle vehicle, Bill bill)
{
_vehicle = vehicle;
_bill = bill;
}
void CheckFuelTank()
{
// Check if the fuel tank is more than 50% full
if (_vehicle.FuelTank.Fuel < 50)
{
_vehicle.FuelTank.Fuel = 100;
bill.AddCost("Refuelled fuel tank", 35);
}
}
void CheckTires()
{
foreach (var tire in vehicle.Tires)
{
if (tire.Tread < 3)
{
tire = new Tire();
_bill.AddCost("New tire", "$99");
}
}
}
}
我可以定义多个维修程序包(使用接口进行形式化),并有一个“车库”对象来决定将哪个程序包应用于汽车。
我的问题:我希望Web应用程序的最终用户定义修复程序包中正在执行的操作。用户应该能够定义要查看的项目(例如油箱),定义条件(燃料不足)并设置操作(增加燃料,增加成本)。
这需要更通用的方法。我尝试了反射,但是这使事情变得极其复杂。用户定义基于条件的操作时,是否存在针对此类问题的设计模式或解决方案