folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Katmanlı Mimari Hakkında Sorularım



Katmanlı Mimari Hakkında Sorularım

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    ANZAK
    ANZAK's avatar
    Kayıt Tarihi: 10/Şubat/2014
    Erkek

    Merhaba hocalar çok uzatmayıp direk konuya gireyim bi video eğitim setinden çok katmanlı mimariyi ögrenmeye çalışıyorum ama tıkandığım bi nokta var videodaki adam Project.Entities class library sinde classlarını tek tek yaziyor anladığım kadarıyla code first deniyor buna ben sql serverda tablolarımı hazırladım doğru mu yaptım emin degilim ama dümdüz Project.Entities e sağ tıklayıp add new itemdan ado.net entity data modelimi ekledim sonra gittim project.dal ın referanslarına project.entity yi ekledim şimdi adam gitti EntityFramework klasörünün içinde projectcontext class ini oluşturdu içinede dbsetlerini yazdı sonra gitti EfUsersDal da private ile context ini tanımlayıp  direk ekleme çıkarma kodlarını yazmaya başladı bende tam bu noktada takıldım çünkü ben data model ekledim benim dbsetlerim zaten data model içinde tekrar ProjectContext de yazmama gerek yok diye düşünüyorum şimdi ortadaki resimdeki using kodunu ben ekledim işin içinden çıkamadığım noktada burası şimdi ben ProjectContext emi bişiler yazip bu EfUsersDal 'a referans verip o şekildemi ilerlemem lazım yoksa bu using ilemi kullanmam doğru yada ben çok başka alemlere girip kayıp mı oldum bilmiyorum. Yardımcı olan arkadaşlara şimdiden teşekkürler.

     

     


    Amatör forever
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Hocam şöyle düşün

     

    İnsanın yeme, sindirme ve boşaltma sistemi gibi katmanlarını oluştur. (class librarry)

    yeme (class library)

    dil.cs

    dis.cs

    yemekborusu.cs

     

    sindirme (class library)

    mide.cs

    asitler.cs

     

    bosaltma (class library)

    kalinbarsak.cs

    incebarsak.cs

     

    Daha sonra mesela incebarsak'a direk olarak mideden bir şey göndereceksen incebarsak.cs içerisine sindirme uzayını import edip (mide ve asitler) adlı sınıfları kullanabilirsin.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    ANZAK
    ANZAK's avatar
    Kayıt Tarihi: 10/Şubat/2014
    Erkek
    ontedi bunu yazdı
     

    hocam cevabın için teşekkürler katmanlı mimarinin ne oldugunu anladığımı sanıyorum benim şuan takıldıgım nokta o aradaki köprüyü doğru kurmak için yazılması gereken kod ve nereye yazılacağı tekrardan ilgilendiğin için teşekkürler.

     

    ANZAK tarafından 02/Şub/16 00:43 tarihinde düzenlenmiştir

    Amatör forever
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    sen dbfirst yaklaşımı ile gittiğin için context oluşturmana gerek yok hocam, direk model üzerinden çalışabilirsin. Yapman gereken model instance ı oluşturup onun üzerinden CRUD işlemleri yapıp daha sonra create/update için save metodunu çağırman yeterli

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    ANZAK
    ANZAK's avatar
    Kayıt Tarihi: 10/Şubat/2014
    Erkek
    unbalanced bunu yazdı

    sen dbfirst yaklaşımı ile gittiğin için context oluşturmana gerek yok hocam, direk model üzerinden çalışabilirsin. Yapman gereken model instance ı oluşturup onun üzerinden CRUD işlemleri yapıp daha sonra create/update için save metodunu çağırman yeterli

    çok teşekkürler hocam dediğini anladım ama bu model intance mi nerde nasıl vereceğim ortadaki EfUsersDal class imda using ilemi ilerlemem gerekiyor yoksa başka bir şekildemi bana bir örnek kod gösterebilir misin?


    Amatör forever
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    zeybekustasi
    zeybekustasi's avatar
    Kayıt Tarihi: 24/Mayıs/2012
    Erkek
    ANZAK bunu yazdı
    unbalanced bunu yazdı

    sen dbfirst yaklaşımı ile gittiğin için context oluşturmana gerek yok hocam, direk model üzerinden çalışabilirsin. Yapman gereken model instance ı oluşturup onun üzerinden CRUD işlemleri yapıp daha sonra create/update için save metodunu çağırman yeterli

    çok teşekkürler hocam dediğini anladım ama bu model intance mi nerde nasıl vereceğim ortadaki EfUsersDal class imda using ilemi ilerlemem gerekiyor yoksa başka bir şekildemi bana bir örnek kod gösterebilir misin?

    Hocam,

    Başka bir katmana daha ihtiyacın var,

    EfUserDal classında DB işlemlerini yaptığını düşünüyorum intefaceye bağlı olarak.

    Senin EF işlemlerini yapan bu katmanı çağıraağın ayrı bir katmanın daha olmalı diye düşünüyorum.

    Interface Ok.

    EF İşlemleri OK.

    EF Context leri Ok.

    Peki bu işlemleri nerede çağıracaksın ayrı bir katmanda. Yani model instanceni diğer katmanda oluşturmalısın diye düşünüyorum.

    Using e gerek yok referans değil ki bu clasın kopyasını oluştursan kafi.

     

     

    zeybekustasi tarafından 02/Şub/16 01:12 tarihinde düzenlenmiştir

    https://www.youtube.com/watch?v=WC3-71NKwPw
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek

    Projenin boyutuna göre değişir. Şuan business layer'ı tek bi yerde kullanmandan ötürü ne gerek var diyosundur.

    Fakat projenin içerisine webservice (webapi veya soap), workflow vs. girdiği zaman poco veya dto'ların gerekli olduğunu görürsün. 

    http://blog.jorgef.net/2010/09/n-tiers-pocos-ef-1.html

    http://rlacovara.blogspot.com.tr/2009/03/what-is-difference-between-dto-and-poco.html

     

    İlk karşına çıkacak olan hata :

    http://stackoverflow.com/questions/17718153/circular-reference-error-when-serializing-objects-in-asp-net-web-api

     

     

    SinusX tarafından 02/Şub/16 01:15 tarihinde düzenlenmiştir

    Si vis pacem para bellum.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    ANZAK bunu yazdı
    unbalanced bunu yazdı

    sen dbfirst yaklaşımı ile gittiğin için context oluşturmana gerek yok hocam, direk model üzerinden çalışabilirsin. Yapman gereken model instance ı oluşturup onun üzerinden CRUD işlemleri yapıp daha sonra create/update için save metodunu çağırman yeterli

    çok teşekkürler hocam dediğini anladım ama bu model intance mi nerde nasıl vereceğim ortadaki EfUsersDal class imda using ilemi ilerlemem gerekiyor yoksa başka bir şekildemi bana bir örnek kod gösterebilir misin?

    Project.Entities e gerek yok hocam bu durumda.. Direk Dal projende oluştur..

    @zeybekustasi nin dediği kısım senin Business Logic Layer'in olacak sanırım onun da projesini oluşturmuşsun ama yapmamışsın henüz.

    Bu arada custom class lar oluştur ve business class ın presentation layer a ( view/gui) bu custom class ları yollasın.

    Mesela şöyle örnek vereyim..

    Kişiler ve Adresler diye tablon var. Sana X kişisi ile ilgili şahsi bilgi ve adresi gerekiyor. Ama bunlar iki farklı tabloda oldukları için bir şekilde birleştirme yapman lazım.

    Başka bir proje oluştur ve modellerini (custom class oluyor sende) burada oluştur ve atıyorum ismi Person olsun

    public class Person
    
    {
    
      public string Name {get; set;}
    
    public string Surname {get; set;}
    
    public string Address  {get; set;}
    
    public string Country  {get; set;}
    
    }

     

    gördüğün gibi kişi ve adres bilgileri için tek bir sınıf oluşturdum. 

    DAL tarafında iki ayrı metodun olacak hem adres hem kişi çekebilmen için. Ancak business katmanında ise tek metodun olacak ve üstteki Person u dönderecek.. Mesela

     

     

    public Person GetPersonByEmail(string email)
    
    {
    
         Kisi  kisi= dalprojen.GetPersonByEmail(email);
    
        Adres adres = dalprojen.GetAdresByKisiId(kisi.Id);
    
      return new Person { 
    
    Name = kisi.Name,
    
    Surname = kisi.Surname,
    
    Address = adres.Adres,
    
    Country = adres.Ulke
    
    };
    
    }

     

    bu şekilde gördüğün gibi custom class üzerinden iş yapıyoruz. İzlediğin set nedir bilmiyorum ama bu şekilde ilerlemen daha doğru olur. Böylece kullanıcılara işe yaramayan bilgi göndermezsin.. 

     

     

    Not: kodları elle yazıyorum  o yüzden syntax hataları olabilir.

    unbalanced tarafından 02/Şub/16 01:22 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    SinusX bunu yazdı

    Projenin boyutuna göre değişir. Şuan business layer'ı tek bi yerde kullanmandan ötürü ne gerek var diyosundur.

    Fakat projenin içerisine webservice (webapi veya soap), workflow vs. girdiği zaman poco veya dto'ların gerekli olduğunu görürsün. 

    http://blog.jorgef.net/2010/09/n-tiers-pocos-ef-1.html

    http://rlacovara.blogspot.com.tr/2009/03/what-is-difference-between-dto-and-poco.html

     

    İlk karşına çıkacak olan hata :

    http://stackoverflow.com/questions/17718153/circular-reference-error-when-serializing-objects-in-asp-net-web-api

     

     

    hocam senin dediğin işin biraz farklı boyutu. Web serviste kullanılacak modeller olsa dahi benim üstte yazdığım mantık ile gidebilir. Sadece ilgili class ların/enumların datamember olarak işaretlemesi kafi.. 

    Kalan işi de business layer da operation larda yapacak. Ama arkadaş daha DAL kısmını çözememiş . Senin bahsettiğin serilizasyon olaylarının onlarca sıkıntısı var :) bu iş sadece .net tabanlı da olmuyor, java da ayrı bir sıkıntı çıkarıyor, dictironary de complex class kullanımında ayrı bir sıkıntı çıkarıyor vs. O yüzden dikkat edilmesi gereken yığınla şey var, en basitinden kullanılacak endpoint türü bile farklı. Ama restful servis yapacaksa bir şey kasmasına gerek yok, json/xml gönderip alabilir onların serileştirmesinde pek sıkıntı yok tüm diller ve platformlar için. Ama dediğim gibi sorun şimdilik farklı yerde. 

     

     

     

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek
    unbalanced bunu yazdı
    SinusX bunu yazdı

    Projenin boyutuna göre değişir. Şuan business layer'ı tek bi yerde kullanmandan ötürü ne gerek var diyosundur.

    Fakat projenin içerisine webservice (webapi veya soap), workflow vs. girdiği zaman poco veya dto'ların gerekli olduğunu görürsün. 

    http://blog.jorgef.net/2010/09/n-tiers-pocos-ef-1.html

    http://rlacovara.blogspot.com.tr/2009/03/what-is-difference-between-dto-and-poco.html

     

    İlk karşına çıkacak olan hata :

    http://stackoverflow.com/questions/17718153/circular-reference-error-when-serializing-objects-in-asp-net-web-api

     

     

    hocam senin dediğin işin biraz farklı boyutu. Web serviste kullanılacak modeller olsa dahi benim üstte yazdığım mantık ile gidebilir. Sadece ilgili class ların/enumların datamember olarak işaretlemesi kafi.. 

    Kalan işi de business layer da operation larda yapacak. Ama arkadaş daha DAL kısmını çözememiş . Senin bahsettiğin serilizasyon olaylarının onlarca sıkıntısı var :) bu iş sadece .net tabanlı da olmuyor, java da ayrı bir sıkıntı çıkarıyor, dictironary de complex class kullanımında ayrı bir sıkıntı çıkarıyor vs. O yüzden dikkat edilmesi gereken yığınla şey var, en basitinden kullanılacak endpoint türü bile farklı. Ama restful servis yapacaksa bir şey kasmasına gerek yok, json/xml gönderip alabilir onların serileştirmesinde pek sıkıntı yok tüm diller ve platformlar için. Ama dediğim gibi sorun şimdilik farklı yerde. 

     

     

     

     

    Yok çok detaya inmeden için üstün körü geçtim kafasında canlanması için. Ne yapacağını bilmeden kafasında oluşmaz. Yeni başlayan çoğu kişi aynı duruma düşüyor


    Si vis pacem para bellum.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    ANZAK
    ANZAK's avatar
    Kayıt Tarihi: 10/Şubat/2014
    Erkek

    hocalar tekrar üşenmeden yazdığınız için teşekkürler 

    @zeybekustasi

    hocam videoyu biraz ileriye aldım adam ayriyeten Project.Interfaces diye ayriyeten bi class library oluşturuyo orayada IUsersService diye bi class açıp gene IUsersDaldakileri yaziyor ama bunu bu sefer BLL katmanında çagariyor orda içini dolduruyor bahsettiğin şey bu mu acaba?

    @SinusX

    hocam senin dediklerini anlayamadım şimdi cahil cahilde konuşmak istemiyorum dediklerini biraz daha inceleyeceğim sanırım dediklerini şu bahsettiğin hatayı alınca anlayacağım.

    @unbalanced hocam entities katmanını sildim modeli aldım dal katmanına ekledim EfUsersDal dada aşağıda resimde gösterdiğim gibi çagardım umarım doğru anlamış ve doğru uygulamıştırım şu aklıma takıldı bu DbEntities 'i oluşturacağım her Ef...Dal classim için bu şekilde mi çagarmaliyim yani doğru kullanım bu mudur acaba? Ayriyeten bu custom class örneğini çok begendim bi kaç adım sonra çok işime yaracak


    Amatör forever
Toplam Hit: 2242 Toplam Mesaj: 13
katmanlı mimari