Сравнение объектов DTO с объектами-значениями похоже на сравнение апельсинов и яблок.
Они обслуживают совершенно разные ситуации. DTO определяет структуру объекта / класса того, как данные будут передаваться между слоями, а объекты-значения определяют логику равенства при сравнении значений.
Позвольте мне объяснить вам примеры, давайте сначала попробуем понять объекты-значения: -
Объект значения - это объект, равенство которого основано скорее на значении
чем личность.
Рассмотрим приведенный ниже код: мы создали два объекта денег: один - одна монета рупии, а другой - одна бумажная валюта рупии.
Money OneRupeeCoin = new Money();
OneRupeeCoin.Value = 1;
OneRupeeCoin.CurrencyType = "INR";
OneRupeeNote.Material = "Coin";
Money OneRupeeNote = new Money();
OneRupeeNote.Value = 1;
OneRupeeCoin.CurrencyType = "INR";
OneRupeeNote.Material = "Paper";
Теперь, когда вы сравниваете вышеперечисленные объекты, приведенное ниже сравнение должно быть истинным, потому что 1 реальная рупия равна 1 рупийной монете в реальном мире.
То есть, вы используете оператор «==» или метод «Равно», и сравнение должно оцениваться как true. По умолчанию «==» или «равно» не будут иметь значение true, поэтому вам нужно использовать переопределение оператора и переопределение метода, чтобы получить желаемое поведение. Вы можете увидеть эту ссылку , которая объясняет, как этого добиться.
if (OneRupeeCoin==OneRupeeNote)
{
Console.WriteLine("They should be equal");
}
if (OneRupeeCoin.Equals(OneRupeeNote))
{
Console.WriteLine("They should be equal ");
}
Обычно значения объектов являются хорошими кандидатами на неизменность; Вы можете прочитать больше об этом из здесь . Вы можете увидеть это видео , в котором описано, как можно создавать неизменяемые объекты.
Теперь давайте попробуем понять DTO: -
DTO (объекты передачи данных) - это контейнер данных для упрощения перемещения
передача данных между слоями.
Они также называются объектами передачи. DTO используется только для передачи данных и не содержит никакой бизнес-логики. У них есть только простые сеттеры и геттеры.
Например, рассмотрим приведенный ниже вызов. Мы делаем два вызова: один для получения данных о клиентах, а другой - для получения данных о продукте.
DataAccessLayer dal = new DataAccessLayer();
//Call 1:- get Customer data
CustomerBO cust = dal.getCustomer(1001);
//Call 2:- get Products for the customer
ProductsBO prod = dal.getProduct(100);
Таким образом, мы можем объединить класс Customer и Product в один класс, как показано ниже.
class CustomerProductDTO
{
// Customer properties
public string CustomerName { get; set; }
// Product properties
public string ProductName { get; set; }
public double ProductCost { get; set; }
}
Теперь с помощью одного звонка мы сможем получить данные о клиентах и продуктах. Объекты передачи данных используются в двух сценариях: один - для улучшения удаленных вызовов, а второй - для выравнивания иерархии объектов; Вы можете прочитать эту статью , которая объясняет больше об объектах передачи данных.
//Only one call
CustomerProductDTO cust = dal.getCustomer(1001);
Ниже приведен полный лист сравнения.