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 Entityni DTOga 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 ๐Ÿš€

  1. Entity โ€” ma'lumotlar bazasini aks ettiradi.
  2. Model โ€” biznes logikani boshqaradi.
  3. DTO โ€” mijoz bilan aloqani soddalashtiradi.
  4. Mapperlar esa ularning barchasini birlashtirib, hammasini zavq bilan boshqarishga imkon beradi. ๐Ÿ˜Ž

Kodda tartib va chiroyli arxitektura โ€” bu haqiqiy "pro" bo'lishning kaliti! ๐Ÿ”‘


Wahid's Avatar

Wahid Abduhakimov