DTO, Model va Entity
Nega bir obyekt o'rniga uchta kerak? ๐ค
Tasdavvur qiling, siz bir xonadonda yashab, o'sha joyda ishlaysiz va mehmonlarni ham shu yerda qabul qilasiz. Tabiiyki, tartib bir oz buziladi, to'g'rimi? ๐ Entity, Model va DTOlarni ajratmaslik ham shunga o'xshaydi. Ularni birga ishlatsangiz, kod ham chalkashadi, ham o'qish qiyin bo'lib qoladi.
Har biri o'z vazifasini bajarsa, kodni tushunish osonroq bo'ladi va har bir qatlam (API, biznes logika, ma'lumotlar bazasi) o'ziga xos mantiqda ishlaydi. ๐ฏ
Ular o'zi nima? ๐คทโโ๏ธ
Term | Definition |
---|---|
DTO | Ma'lumotlarni uzatish obyekti (DTO) โ bu ilovaning qatlamlari o'rtasida ma'lumotlarni uzatish uchun ishlatiladigan yengil ob'ekt. |
Model | Ilovangiz ichida ishlatiladigan ma'lumotlar tuzilmasini ifodalaydi, ko'pincha biznes mantiqiga yaqin. |
Entity | Sizning saqlash qatlamingizdagi ma'lumotlar bazasi jadval tuzilmasini ifodalaydi, odatda EF Core kabi ORM bilan bog'liq. |
Asosiy Farqlar
graph TD;
Entity-->Database["Ma'lumotlar Bazasi Jadvali"];
Model-->BusinessLogic["Biznes Mantiqi"];
DTO-->API["Mijoz yoki API Bilan O'zaro Ta'sir"];
- Entitylar ma'lumotlar bazasi bilan o'zaro ta'sir qilish uchun ishlatiladi va jadvallardagi qatorlarni ifodalaydi.
- Modellar ilovangiz ichida ma'lumotlarni qanday qayta ishlashini belgilaydi.
- DTOlar qatlamlar o'rtasida yoki tashqi mijozlarga to'g'ri ma'lumotlarni uzatishga e'tibor qaratadi.
Entity nima? ๐ฆ
Entity โ bu sizning ma'lumotlar bazasidagi jadvalning aksidir. Ya'ni, har bir qatorni obyekt ko'rinishida tasvirlaydi.
/// <summary>
/// Ma'lumotlar bazasidagi Book jadvali uchun Entity.
/// </summary>
namespace Ilmhub.Api.Entities;
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public decimal Price { get; set; }
public DateTime PublishedDate { get; set; }
}
Note
Entity bilan bevosita API yoki biznes qatlamida ishlash tavsiya etilmaydi. Chunki bu xavfsizlik va moslashuvchanlikni kamaytiradi.
Model nima? ๐ ๏ธ
Model โ bu biznes logikaga mos keladigan ma'lumotni tasvirlash uchun ishlatiladi. Ko'pincha validatsiya yoki ma'lumotni qayta ishlash uchun kerak bo'ladi.
/// <summary>
/// Ilovadagi ma'lumotni qayta ishlash uchun Model.
/// </summary>
namespace Ilmhub.Api.Models;
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
public decimal Price { get; set; }
}
Tip
Model โ bu qahvaxona ichidagi menyu: tashqi mijozlar uni ko'rmaydi, lekin u asosiy faoliyatni boshqaradi. โ
DTO nima? ๐
DTO (Data Transfer Object) โ bu ma'lumotni tashqi dunyoga (API mijozlariga) jo'natish uchun eng qulay shaklga keltirilgan obyekt.
/// <summary>
/// API uchun DTO.
/// </summary>
namespace Ilmhub.Api.Dtos;
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
}
Note
DTO ma'lumotni minimal miqdorda va xavfsiz shaklda yetkazish uchun ishlatiladi. Ya'ni, "bu yerda faqat kerakli narsani oling" tamoyiliga asoslanadi. ๐ก๏ธ
Mapperlar va ularning ahamiyati โจ
Mapperlar โ bu ma'lumotni bir obyekt turidan ikkinchisiga avtomatik ravishda o'zgartiruvchi sehrli vosita. ๐ฉ๐
Tasavvur qiling, qo'lda har bir Entity
ni DTO
ga aylantirasiz: bu matematika muammosiday gap! Mapperlar esa buni avtomatlashtirib, hayotingizni yengillashtiradi.
AutoMapper misoli
var configuration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Entities.Book, Dtos.Book>();
cfg.CreateMap<Models.Book, Entities.Book>();
});
var mapper = configuration.CreateMapper();
// Entity'dan DTO yaratish:
var dto = mapper.Map<Dtos.Book>(entity);
Tip
Mapperlar ishlashda vaqtni tejaydi va kamroq xato qilishga yordam beradi. ๐งโณ
Hammasi Minimal API-da qanday ishlaydi? ๐งฉ
Quyida Entity, Model, DTO va Mapperlar birgalikda qanday ishlashini ko'rsatamiz:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
// Misol uchun: xotira ichida ma'lumotlar bazasi
var books = new List<Entities.Book>
{
new Entities.Book { Id = 1, Title = "C# in Depth", Author = "Jon Skeet", Price = 39.99M, PublishedDate = DateTime.Now }
};
// Mapper sozlash
var configuration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Entities.Book, Dtos.Book>();
cfg.CreateMap<Models.Book, Entities.Book>();
});
var mapper = configuration.CreateMapper();
// Barcha kitoblarni olish (DTO shaklida)
app.MapGet("/books", () =>
{
return books.Select(book => mapper.Map<Dtos.Book>(book));
});
// Yangi kitob qo'shish (Model orqali)
app.MapPost("/books", (Models.Book model) =>
{
var newBook = mapper.Map<Entities.Book>(model);
newBook.Id = books.Count + 1;
newBook.PublishedDate = DateTime.Now;
books.Add(newBook);
return Results.Created($"/books/{newBook.Id}", newBook);
});
app.Run();
Xulosa ๐
- Entity โ ma'lumotlar bazasini aks ettiradi.
- Model โ biznes logikani boshqaradi.
- DTO โ mijoz bilan aloqani soddalashtiradi.
- Mapperlar esa ularning barchasini birlashtirib, hammasini zavq bilan boshqarishga imkon beradi. ๐
Kodda tartib va chiroyli arxitektura โ bu haqiqiy "pro" bo'lishning kaliti! ๐