ASP.NET Core

LDAP konsolu için DDD: neler işe yaradı, neler atıldı, sınırları testler nasıl koruyor

Axia, Active Directory ve OpenLDAP için .NET 10 ile yazılmış açık kaynaklı bir web konsolu. Geliştiricisi, güvenlik incelemelerinden sonra DDD yaklaşımının neden yarısından fazlasını bıraktığını anlatıyor. Value object'ler, portlar ve adaptörler ile mimari sınırları koruyan testler, kendi projelerinde de uygulanabilir pratikler sunuyor.

Habr C# (ru) Nurlan-Turkpenbay
Yayın tarihi
Okuma süresi
9 dk okuma
agent çalıştırması #14
agent çalıştırması #14
Orijinale git habr.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Dış kaynağın sahibi olduğunuz verileri ayırın; agregaları yalnızca kendi sahibi olduğunuz veriler için kullanın.
  • Arama filtresi, DN ve gizli anahtar gibi değerleri value object olarak modelleyin; ToString() ile sır sızıntısını engelleyin.
  • Audit kaydını domain event yerine MediatR pipeline davranışı ve işaretleyici arayüzle zorunlu kılın.
  • Komut ve handler tiplerini internal tutun; katman sınırlarını reflection testiyle doğrulayın.
  • Grup eşlemesini CN yerine DN ile yapın; CN yalnızca kendi konteyneri içinde benzersizdir.
  • Yetki denetimi dış sistem sorgusu gerektiriyorsa, onu Application katmanına koyup testlerle kapsayın.

Projenin asıl sorunu, verinin uygulamaya ait olmamasıydı. Kullanıcılar ve gruplar Active Directory ya da OpenLDAP içinde yaşadığı için zengin bir User agregası, dizin sunucusunun gerçek kurallarıyla çelişebiliyordu. Bu nedenle kullanıcı salt okunur bir read-model olarak modellendi. Value object'ler ise arama filtresi, DN ve şifreli sır gibi gerçekten anlam taşıyan değerler için kullanıldı.

Audit kaydı domain event'lerinden pipeline davranışına taşındı, çünkü olayı yayımlamayı unutmak kolaydı ve bazı işlemler hiç kayda girmiyordu. Ayrıca handler'lar ve komutlar internal yapıldı, mimari kurallar da reflection tabanlı testlerle korundu. Yazar, en kritik yetki kuralının ise dış sistem sorguları gerektirdiği için domain yerine Application katmanında kaldığını belirtiyor.

Gerçek dünyada kullanımı

  • Active Directory veya OpenLDAP üzerinde yönetim paneli geliştiren bir ekip, kullanıcı verisini read-model olarak tutabilir.
  • Denetim kaydının eksiksiz olması gereken bir MediatR tabanlı uygulamada, her komutun audit işaretini zorunlu kılabilir.
  • Birden fazla dizin sunucusu destekleyen bir uygulamada, farklı sağlayıcıları ILdapService gibi portların arkasına gizleyebilir.

Neden önemli

Dış sistemin kurallarını domain'e kopyalamak yanlış sonuç üretebilir, bu yüzden hangi verinin sahibi olduğunuzu önce netleştirin. Yetki ve audit gibi kesişen kuralları ise unutulmayacak mekanizmalarla, örneğin pipeline ve mimari testlerle güvence altına alın.

Bu özet, Habr C# (ru) üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü