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.
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.
Benzer haberler
- React, .NET 10 ve Microsoft Foundry ile güvenli bir kurumsal chatDEV Community: #dotnet1 gün önce
- ASP.NET Core'da authentication ve authorization: ne zaman hangisi, güvenle nasıl yayına alınırDEV Community: #aspnetcore1 gün önce
- MCP Sunucularında Ölçekte Rate Limiting ve Kaynak YönetişimiDEV Community: #aspnetcore1 gün önce