Как изменить класс без перекодирования? - PullRequest
0 голосов
/ 05 декабря 2018

В моем проекте я создаю объект водительских прав, и у всех сотрудников будет свой собственный объект, связанный с их уникальным номером часов.У меня есть отдельная таблица в моей базе данных для водительских прав, но в будущем потребуется добавить больше типов транспортных средств, есть ли способ сделать это без перекодирования?столбцы в моей базе данных совпадают с атрибутами для класса ниже

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);
        }
    }

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы должны были создать объект LicenseDTO с атрибутами ClockNo и CBalance вместе с массивом типа Vehicle.который будет интерфейсом.Интерфейс «Транспортное средство» может определять любые распространенные методы, которыми обладают транспортные средства.и все будущие транспортные средства должны будут реализовать интерфейс.Таким образом, вам не нужно менять код.Ваш текущий код не может быть «изменен» без редактирования.Вы можете попытаться расширить свой класс LicenseDTO другим классом сущностей, который реализует вышеуказанный интерфейс.но не намного больше вы можете обойтись без редактирования.

Если вы хотите, чтобы для удобства эксплуатации использовались интерфейсы, шаблоны репозитория, абстрактные классы и внедрение зависимостей.

0 голосов
/ 05 декабря 2018

Вместо того, чтобы иметь несколько битовых столбцов в вашей базе данных для обозначения разных типов транспортных средств, используйте одну таблицу 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 вместо идентификатора.

0 голосов
/ 05 декабря 2018

Почему бы не создать таблицу с типами транспортных средств?В будущем вы можете получить доступ к вашей таблице и вставить больше типов.

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; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...