繁体   English   中英

如何在不重新编码的情况下更改类?

[英]How to change a class without re-coding?

我正在我的项目中创建一个驾驶执照对象,员工都将拥有一个与他们唯一的时钟编号相关联的驾驶执照对象。 我的数据库中有一个单独的表用于驾驶执照,但将来需要添加更多类型的车辆,是否可以在不重新编码的情况下执行此操作? 我的数据库中的列与下面类的属性相同

public class LicenseDTO
{
    public int ClockNo { get; set; }
    public bool CBalance { get; set; }
    public bool MR16 { get; set; }
    public bool OrderPicker { get; set; }
    public bool Reach { get; set; }
    public bool Pedestrian { get; set; }
    public bool Lorry { get; set; }
    public bool Sweeper { get; set; }
    public bool Washer { get; set; }
}

编辑

我试图尽我所能创造这个,但我觉得它真的很啰嗦,可以用更有效的方式来完成。 这是我的代码的更新版本。

public class LicenseDTO
{
    public int ClockNo { get; set; }
    public List<Common.VehicleTypeDTO> Vehicles { get; set; }
}

public class VehicleTypeDTO
{
    public string VehicleType { get; set; }
    public bool Allowed { get; set; }
}

private void btnClockCardIn_Click(object sender, EventArgs e)
    {
        Common.LicenseDTO License = new Common.LicenseDTO();
        List<Common.VehicleTypeDTO> Vehicles = new List<Common.VehicleTypeDTO>();
        Common.VehicleTypeDTO CBalance = new Common.VehicleTypeDTO();
        Common.VehicleTypeDTO MR16 = new Common.VehicleTypeDTO();
        License.Vehicles = Vehicles;
        CBalance.VehicleType = "CBalance";
        CBalance.Allowed = true;
        MR16.VehicleType = "MR16";
        MR16.Allowed = false;
        License.Vehicles.Add(CBalance);
        License.Vehicles.Add(MR16);
        foreach (Common.VehicleTypeDTO Vehicle in License.Vehicles)
        {
            MessageBox.Show(Vehicle.VehicleType + " " + Vehicle.Allowed);
        }
    }

为什么不创建一个包含车辆类型的表格? 将来您可以访问您的表并插入更多类型。

public class VehicleTypeDTO
{
    public int Id{ get; set; }
    public string Name{ get; set; }
}

public class LicenseDTO
{
    public int Id { get; set; }
    public List<VehicleTypeDTO> VehicleTypes { get; set; }
}

您应该在类型为 Vehicle 的数组旁边创建了一个具有 ClockNo 和 CBalance 属性的实体 LicenseDTO。 这将是一个界面。 接口 Vehicle 可以定义车辆具有的任何通用方法。 并且所有未来的车辆都必须实现该接口。 这样您就不必更改任何代码。 未经编辑,您当前的代码无法“更改”。 您可以尝试使用另一个实现上述接口的实体类来扩展您的 LicenseDTO 类。 但没有更多你可以不编辑。

如果您想要可维护性,请从接口、存储库模式、抽象类和依赖注入开始。

不要在数据库中使用多个位列来指示不同类型的车辆,而是使用单个VehicleType表。 然后,您可以根据需要添加任意数量的不同车辆类型,并使用 VehicleTypeID 来唯一标识它们。 然后,您可以将越来越多的车辆类型添加到表中,而无需编写更多代码。

VehicleType
    VehicleTypeID int
    VehicleTypeName varchar(50)

public class LicenseDTO
{
    public int ClockNo { get; set; }
    public int VehicleTypeID { get; set; }
}

如果您想针对单个 ClockNo 拥有多种类型的车辆,请使用 int 列表:

public class LicenseDTO
{
    public int ClockNo { get; set; }
    public List<int> VehicleTypes { get; set; }
}

或者,您可以引用 VehicleType 对象,而不仅仅是 ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM