Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: DTO Tasarım Deseni: Aşırı Mühendislik mi?
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » DTO Tasarım Deseni: Aşırı Mühendislik mi?

Yazılım

DTO Tasarım Deseni: Aşırı Mühendislik mi?

teknomers
Son güncelleme: 18 Mart 2026 18:02
teknomers
Paylaş
Paylaş

DTO’lar (Data Transfer Object), bazı geliştiriciler tarafından açıklanırken çok basit bir şekilde ele alınabiliyor, bu da konuyu anlaşılır kılıyor ancak derinlemesine bir anlayış kazandırmıyor. Bu makalede DTO’ların kullanımına dair avantajları ve pratik örnekler sunulacaktır.

Contents
  • Gerçek Dünya Örneği: Büyük Veriler ve Katmanlar
  • DTO’lar Burada Kullanılabilir Mi?
  • Gerçek Kullanımda Eksik Verilerin İşlenmesi
  • Doğru Yaklaşım: İş İhtiyaçlarına Odaklanmak
  • Sizce bu konuda ne düşünüyorsunuz? 😃

Birçok kişi şu soruları sorar:

  • DTO’ları neden kullanmalıyım?
  • Normal yöntemlerle yapamaz mıyım? Bu aşırı mühendislik değil mi?

Aşağıdaki örnekte bir DTO oluşturma sürecine bakalım:

namespace App\DTO;

class UserDTO
{
    public string $name;
    public string $email;
    public string $password;

    public function __construct(string $name, string $email, string $password)
    {
        $this->name = $name;
        $this->email = $email;
        $this->password = $password;
    }
}

DTO’yu kullanmak için bir örnek:

public function createUser(Request $request)
{
    $userDTO = new UserDTO(
        $request->input('name'),
        $request->input('email'),
        $request->input('password')
    );

    $user = $this->userService->createUser($userDTO);

    return response()->json($user);
}

Ancak biri şöyle diyebilir: DTO kullanmak zorunda mıyım? Bunun yerine şunu yapabilirim:

$user = $this->userService->createUser($request->all()); // $request->validate()

Bu noktada $fillable ile kitle atama korumam vardır.

Doğru: Haklısınız.

Gerçek Dünya Örneği: Büyük Veriler ve Katmanlar

Büyük verilerle çalıştığımızda ve verileri çeşitli katmanlardan ilettiğimizde genellikle diziler kullanırız. Aşağıdaki $history yapısına bir göz atalım:

Aynı yapıyı kullanıyorum:

  • HolidayShift
  • PublicHoliday
  • Errands
  • Leaves
  • OvertimeRequest

Bu yapılarda bazı öğeler 0, null veya hiç var olmayabilir.

public function getHolidayHistory($timeManagement, $overtime_schedule, $contract, $work_schedule, $publicHolidays, $attend)
{
    $holiday = [];

    foreach ($publicHolidays as $holiday) {
        if (Carbon::parse($attend->date)->between($holiday->start_date, $holiday->end_date)) {
            $latesSignInMinutes = $this->calculator->calculateLateSignIn($attend, $work_schedule->start_time);
            $earlyLeaving = $this->calculator->calculateEarlyLeaving($attend, $work_schedule->end_time);

            $history[] = [
                'absent'      => false,
                'type'        => 'holiday',
                'date'        => $attend->date,
                'item'        => $holiday,
                'attend_item' => $attend,
                'data'        => [
                    'sign_in'                        => $attend->sign_in,
                    'sign_out'                       => $attend->sign_out,
                    'late'                           => $latesSignInMinutes,
                    'late_deducted_percent'          => 0,
                    'early_leaving_deducted_percent' => 0,
                    'early_leaving'                  => $this->calculator->checkFromFingerprintOut($timeManagement, $earlyLeaving),
                    'deducted_percent'               => 0,
                    'overtime'                       => Carbon::parse($attend->duration)->hour,
                    'amount_overtime'                => $this->presentPublicHolidays->getPresentPublicHolidayAmount(
                        $overtime_schedule,
                        $contract,
                        $attend->duration
                    ),
                ],
            ];
        }
    }

    $history[] = [
        => true,
        => ,
        => $attend->date,
        => $attend,
    ];

    return $history;
}

Peki burada potansiyel problemler görebiliyor musunuz? Kodlama açısından, hata almadan çalışabiliriz ancak gerçek dünyada her zaman %100 güvenilir değiliz.

Büyük özellikler için test kullanımını benimsiyoruz; ancak bu gibi durumlarda TDD her zaman uygulanabilir olmayabiliyor. Dolayısıyla, bazı öğeler yoksa her kullanımda $history için her seferinde yazmamız gereken kod:

isset($history[]) ? $history[] : 0; // or
$history[] ?? 0;

DTO’lar Burada Kullanılabilir Mi?

$history[] = new AttendanceHistoryDTO(
    absent: false,
    type: ,
    date: $attend->date,
    item: $holiday,
    attend_item: $attend,
    data: new AttendanceDataDTO(
        : $attend->sign_in,
        : $attend->sign_out,
        : $latesSignInMinutes,
        : $this->->(, ),
        : 0,
        : Carbon::($attend->duration)->hour,
        : $this->presentPublicHolidays->(
            $overtime_schedule,
            $contract,
            $attend->duration
        ),
        : 0,
        : 0,
    )

Artık $history‘yi kullanırken endişelenmemize gerek yok:

isset($history[]) ? $history[] : 0;

Çünkü varsayılan değerler artık DTO’nun içinde saklı.

Gerçek Kullanımda Eksik Verilerin İşlenmesi

Aşağıda gerçek kullanım örneği:

isset($content?->data?->total_late) ? $content?->data?->total_late : 0;

Neden hala bunu yapıyorum?

DTO’lar kullanıldığında:

  • Varlık olmayan bir şey yazarsanız, editörünüz sizi uyarır.
  • PHP, geliştirme ve test sürecinde bir istisna fırlatır — bu iyi bir durumdur.
  • Ancak üretimde istisnalara sahip olmak her zaman iyi bir fikir değildir. 😅

Doğru Yaklaşım: İş İhtiyaçlarına Odaklanmak

DTO’ları kullanmanın birçok doğru yolu vardır. Ancak her zaman öncelikle iş ihtiyaçlarına odaklanmalısınız. Problemi anlamak, ardından doğru aracı seçmek gerekir.

Kişisel olarak, tercih ettiğim yöntem:

Kodu kötü yaz → normal hale getir → sonra en iyi çözüm nedir diye sor.

Sizce bu konuda ne düşünüyorsunuz? 😃

Kaynak: Orijinal Makale

Veri Kaybını Önleyin: Laravel’deki Yarış Şartlarını Nasıl Düzeltirsiniz
Laravel API Kimlik Doğrulaması ile Sanctum
Nepal’den WhatsApp odaklı bir web uygulaması olan ChatMandu’yu geliştirdim
Frank: süper şarjlı Laravel Sail alternatifiniz
Node.js’de Laravel İlhamlı Bir Çerçeve Geliştirdim (Nedenleri) – NetPress
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Asus’un Yeni Oyun Monitörüyle Oyununuzda Fark Yaratın
Sonraki Makale Acil Uyarı: Büyük Perakendeciler ve Ödeme Platformlarına Saldırı!

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

ASML, ABD’nin Çin’de bulunan chip aracını yalanladı
Yapay Zeka
Acil: Apple, Beats Studio Buds’taki Kritik Mikrofon Açığını Kapatıyor
Siber Güvenlik
Acil Uyarı: Fortinet Kullanıcıları FortiBleed Sızıntısına Dikkat!
Siber Güvenlik
Kanser Tedavisinde Pseudobilim: Plastik Torbada Bleach ile Gasilme Şoku!
Genel
Hızlandırılmış Analitik: Laravel’de Malzeme Görünümleri
Yazılım
Barret Zoph, OpenAI’den Sadece Beş Ay Sonra Ayrıldı
Liste
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?