设计针对(数据)对象的用户定义的基于条件的操作

时间:2019-06-24 08:16:23

标签: c#

我有一个带有(嵌套)属性的类,这些属性定义物理现实世界对象的配置。出于保密目的,我无法显示实际代码,因此假设它是车辆。

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应用程序的最终用户定义修复程序包中正在执行的操作。用户应该能够定义要查看的项目(例如油箱),定义条件(燃料不足)并设置操作(增加燃料,增加成本)。

这需要更通用的方法。我尝试了反射,但是这使事情变得极其复杂。用户定义基于条件的操作时,是否存在针对此类问题的设计模式或解决方案

0 个答案:

没有答案