Ручное создание классов Vs.DBML - PullRequest
0 голосов
/ 09 ноября 2011

В настоящее время я создаю объекты для моего приложения, когда мне это приходит в голову.Я знаю, что использование DBML над ручным созданием классов (см. Класс ниже) может повысить скорость разработки моего приложения, но я действительно запутался в том, что было бы другими недостатками и преимуществами использования DBML по сравнению с ручным созданием классов, как у меня ».Я делаю ниже, спасибо всем, кто поможет.:)

[Serializable]
public class Building
{
    public Building()
    {
        LastEditDate = DateTime.Now.Date;
        LastEditUser = GlobalData.CurrentUser.FirstName + " " + GlobalData.CurrentUser.LastName;
    }

    public int BuildingID { get; set; }
    public string BuildingName { get; set; }
    public bool IsActive { get; set; }
    public DateTime LastEditDate { get; set; }
    public string LastEditUser { get; set; }

    public static bool CheckIfBuildingNameExists(string buildingName, int buildingID = 0)
    {
        return BuildingsDA.CheckIfBuildingNameExists(buildingName, buildingID);
    }

    public static Building CreateTwin(Building building)
    {
        return CloningUtility.DeepCloner.CreateDeepClone(building);
    }

    public static List<Building> GetBuildingList()
    {
        return BuildingsDA.GetBuildingList();
    }

    public static List<Building> GetBuildingList(bool flag)
    {
        return BuildingsDA.GetBuildingList(flag).ToList();
    }

    public static Building SelectBuildingRecord(int buildingId)
    {
        return BuildingsDA.SelectBuilding(buildingId);
    }

    public static void InsertBuildingRecord(Building building)
    {
        BuildingsDA.InsertBuilding(building);
    }

    public static void UpdateBuildingRecord(Building building)
    {
        BuildingsDA.UpdateBuilding(building);
    }

    public static void DeleteBuildingRecord(int building)
    {
        BuildingsDA.DeleteBuilding(building);
    }
}

и мой DAL выглядит следующим образом:

internal static class BuildingsDA
{
    internal static Building SelectBuilding(int buildingId)
    {
        SqlCommand commBuildingSelector = ConnectionManager.MainConnection.CreateCommand();
        commBuildingSelector.CommandType = CommandType.StoredProcedure;
        commBuildingSelector.CommandText = "Rooms.asp_RMS_Building_Select";
        commBuildingSelector.Parameters.AddWithValue("BuildingID", buildingId);

        SqlDataReader dreadBuilding = commBuildingSelector.ExecuteReader();
        if (dreadBuilding.HasRows)
        {
            dreadBuilding.Read();
            Building building = new Building();
            building.BuildingID = int.Parse(dreadBuilding.GetValue(0).ToString());
            building.BuildingName = dreadBuilding.GetValue(1).ToString();
            building.IsActive = dreadBuilding.GetValue(2).ToString() == "Active";
            building.LastEditDate = dreadBuilding.GetValue(3).ToString() != string.Empty ? DateTime.Parse(dreadBuilding.GetValue(3).ToString()) : DateTime.MinValue;
            building.LastEditUser = dreadBuilding.GetValue(4).ToString();
            dreadBuilding.Close();
            return building;
        }
        dreadBuilding.Close();
        return null;
    }

    ....................
}

Я также хотел бы знать, что может быть быстрее между двумя методами реализации ООП, спасибо:)

Ответы [ 2 ]

4 голосов
/ 09 ноября 2011

DBML

Плюсы:

  1. Вы можете сделать свою работу быстро!

Минусы:

  1. Вы не можете сформировать свою сущность так, как хотите, например, вам нужно 5 столбцов из таблицы, но у нее есть 10 столбцов, и вы получите все из них, по крайней мере, ее схему. Если вас не волнует объем данных
  2. Ваша клиентская сторона будет зависеть от DAL (Уровень доступа к данным), если вы измените имя свойства, введите DAL, который необходимо изменить как в BLL (Уровень бизнес-логики), так и в клиенте (Уровень представления)

Если вы создадите класс вручную, вам может потребоваться немного больше времени для написания кода, но вы станете более гибким с ним. Ваш клиентский код не будет зависеть от вашего DAL, любые изменения в DAL не вызовут проблем с клиентским кодом.

2 голосов
/ 09 ноября 2011

Создавая свои классы моделей вручную, вы можете добавить дополнительные атрибуты к свойствам (это невозможно сделать с помощью DBML), применить собственную проверку данных (насколько я помню, это можно сделать с помощью DBML с использованием частичных методов).

Со многими таблицами и ассоциациями DBML может стать трудночитаемым.

Недостаток создания классов моделей вручную заключается в том, что вам приходится делать все, что связано с DBML (атрибуты и много кода).

Если вы хотите создать классы моделей вручную, вы можете взглянуть на Entity Framework Code First или Fluent NHibernate. И то, и другое позволяет легко создать модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...