Merhaba,
katmanlar arasinda bir DTO (Data Transfer/Transmit Object) ya da VO (Value Object) objesinin kullanilmasinda hicbir zaman problem olmaz. Ancak buradaki önemli nokta objenin dogru sekilde tasarlanmasi ve amacina uygun kullanilmasi. Zaten her halükarda bu gibi cok katmanli projelerde kullanmak zorundayiz bu objeyi. Hem güvenlik, hem nesnelerin ve projelerin katmanlar arasi haberlesmesi icin. Bu tabii ki sizin arka plandaki programlama mantiginizla paralel olan bir durum.
Ne projeler var katmanlar arasi haberlesen objenin boyutu proje boyutundan yüksek olan. Siz kendi yaptiginizin farkina varin. Projeniz güzel ve profesyonel adimlarla ilerliyorsunuz.
Bir Abstract yapisinin projeye uygulandigi durumlari sadece intern ve kesin güvenligi saglanmis platformlarda kullaniyorum sahsen. Ve bu nerdeyse son 10 yilda 1 kez kullandim. Yazilim mimarisine uygun ve büyüklügü dolayisiyla yalniz basina bir Abstract altyapisi degil, aksine Abstract'in uygulandigi projeye yine bir tasarim deseni implemente ederek disa acilmasini sagladim. Iki tasarim desenini farkli nedenlerden dolayi beraber kullanarak yapilandirmayi uygun buldum. En önemli nokta tabii ki güvenlikti. Hicbir zaman Abstract uygulanmis bir projeyi asla disardan direkt haberlestirmedim. Dolayisiyla projelerimde Abstract yapisini kullanmaktan sürekli kaciniyorum diyebilirim. Bu benim kendi güvenlik önlemim. Teknik olarak ben kendi yazilim güvenligimi uygulayabilmem icin Abstract tabanli bir deseni degistirerek kullaniyorum. Cok kabaca anlatimla Abtract'a bakis acim bu. Tabii ki herkes farkli düsünür.
Infrastructure katmanini nerede barindirdiginizi ya da yapisini bilemedigim icin cok fazla detaya giremiyorum ancak bir tahminle devam edeyim.
1)
Bir API projesinde UI tarafinda (Master API / UI) uygulama güvenligi ilk plandadir. Kullanici güvenligi ikinci plandadir. Cünkü uygulama, verilerin iletimini saglarken, kullanici güvenligini saglamak sadece güvenligi saglanmis iletim üzerinden denetimi yapmakla olan bir yükümlülüktür. Yani mimarinizin Master API katmaninda nasil bir güvenlik uyguluyorsaniz bu kullanicinin güvenligini saglayacagindan dolayi önemlidir. Ve bu projede Abstract kullaniyorsaniz ve gelen DTO objesini ya da icerisindeki objeyi kontrol edebilmeniz icin tip bilgilerini barindirmaniz gerekmektedir. Bu da size gereksiz ekstra yükler getirir ve bir güvenlik acigidir. Cünkü sadece tip denetimi icin bu bilgileri Master API katmaninda tutmak.. Cok büyük projelerin, bilindik uygulamalarin arka planindaki calisma sistemleri o kadar basittir ki. Yöntemler ve kurallar basit.
Tahminen uygulamanizi su sekilde düsünüyorum. Infrastructure bir Class Library ve Application katmani ile Master API arasindaki iletisimi ve bilgileri Master Domain'e iletmekle ve geri bildirimde bulunmakla (ya da baska görevler de dahil olmak üzere) sorumlu. Infratructure katmanini sadece Application katmani kullanir, yönetir. Master API projeniz ise bir Client'dir.
Master API uygulamasi sadece kullanici bilgisini güvenli bir sekilde Infrastructure'a gönderecek ve sadece true/false geri bildirimi alacak. Aslinda Master API ile Infrastructure arasinda bir DTO objesi olmasi söz konusu degil bu durumda. Ancak bir kalici baglanti, XML ya da JSon gibi veri gönderimi/alimi, timestamp, token ve diger bilgiler ya da diger önemli faktörler varsa buna göre dizayn etmeniz gereken bir DTO objesi olabilir. Eger durum buysa o zaman Application katmanindaki cogu görev Infrastructure projesine aittir ve uygulayici burada Application katmanidir. Uygulamanizi planlarken yaptiginiz dizayni yine en iyi siz bileceginiz icin burada Application katmaninin görevini ben bilemem. Ancak mutlaka sizin düsündügünüz bir görev vardir. Infrastructure katmani da faktörleri isletmek icin olan araci sorumlu katmandir.
Eger durum buysa asagidaki diagrami inceleyin.

2)
Master API bir Client degilse o zaman tüm projeniz bir cati altindadir ve sadece isteklere yanit vermekle yükümlüdür. O zaman yine durum farkli degil ancak sadece Master API projenizi Client olarak görmeyecegiz ve isteklere yanit veren ilk API node'u olarak düsünecegiz. Tabii ki burada güvenlik rolü bir Client'a göre farklidir, domain üzerindeki istekleri yanitlayici uygulamaya göre farklidir.
Dedigim gibi projenizin dizayn mantigi, plani hakkinda cok fazla detay bilemedigim icin elimden geldigi kadar bir kurguyla yaklastim.
Saygilarimla