folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Irepository Hakkında Ve Daha Fazlası



Irepository Hakkında Ve Daha Fazlası

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

    Bi eğitim serisi ile bu katmanlı mimariyi ögrenmeye çalışıyorum eğitim genel olarak iyi ama bazı yerleri hiç anlatmadan geçiyor bende oturmayıncada ilerleyemiyorum sorularım aşağıdaki gibi cevaplayan arkadaşlara şimdiden teşekkürler.

     public interface IRepository<T> where T : class
        {
            // Tüm datamızı çekecek
            IEnumerable<T> GetAll();
    
            //Tek bir data gelecek
            T GetById(int id);
    
            T Get(Expression<Func<T, bool>> expression);
    
            IQueryable<T> GetMany(Expression<Func<T, bool>> expression);
    
            void Insert(T obj);
    
            void Update(T obj);
    
            void Delete(int id);
    
            int Count();
    
            void Save();
    
    
    
        }

     

    Şu şekilde bi IRepository var. Insert, update, delete, count, save kisimlarini anladım ama 2 tane farklı get yazdı id ye göre 

    T GetById(int id);

    T Get(Expression<Func<T, bool>> expression);

    Bu 2 sinin birbirinden farkı nedir acaba? GetById li olan kısmı anladım ama alttaki karmaşık geldi ve neden yazdığını anlayamadım

    IEnumerable<T> GetAll();

    IQueryable<T> GetMany(Expression<Func<T, bool>> expression);

    Birde bu 2 kod satırı var birinde Enumerable digerinde Queryable kullanılmış enum ve query nin farkına baktım internetten query li olan diğerinden daha hızlıymış bu eğitimi çeken çocuk yanlışlıkla mı yapmış yoksa bi nedeni mi var birinde query birinde enum kullanılmasının ?

    Son olarakta örneğin KullaniciRepository sayfasında yani bu implement işleminin gerçekleştiği yerde db yi alttaki şekilde çağarıyor         

    private readonly BlogContext _context = new BlogContext(); Bu kullanımın aşağıdaki kullanımdan farkı ne yani biri doğru biri yanlış mı yada birinin kullanıldığı yer ayrı diğerinin kullanıldığı yer ayrı mı ?

     using (SqlConnection con = new SqlConnection(), con2 = new SqlConnection()) { 

     Yani bu using kullanımı nedir neden ve nasıl kullanılır benim bu readonly li kod blogumda bu using i kullanmama gerek var mı varsa nasıl kullanıcam yoksa neden yok? Soruların tümüne cevap vermenize gerek yok bildiklerinizi yazmanız yeterli

     

    ANZAK tarafından 03/Kas/17 18:09 tarihinde düzenlenmiştir

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

    hizli hizli yazayim anlamadigin yer varsa sorarsin tekrar cikmam lazim cünkü.

     

    1- bahsettigin int id bildigin normal fonksiyon parametresi, digerine predicate deniyor ve parametreye göre bool vermen lazim ama söyle mesela bu get fonksiyonunu cagirirken get(a=>a >10); seklinde cagirman gerek

     

    2-  IQueryable de aslinda IEnumerable den türemistir. Local listeler icin genelde IEnumerable, remote listeler icin (bellegin tasma olasiligi olma durumunda) digeri IQueryable. yani bir webservisin var ve oradan bi sonuc bekliyorsun ama ne kadar döner fikrin yok.. Bu gibi durumlarda IQueryable kullanilmasi daha uygun.

    3- using keyword u IDisposable arayüzünden türeyen siniflarin instancelarini (örneklerini), isi bittikten sonra bellekten kaldirmak icin kullanilir. Yani SqlConnection sinifina bakinca muhtemelen IDisposable dan türedigini göreceksin. 

    using parantezinden sonra artik sql sinifindan olusturdugun instance (degisken diyelim) artik kullanamzsin, hem kodda gecerli degil hem de bellekte yok edilmis. Cünkü nesnenin Dispose metodu cagrilmis. Context i sürekli kullaniyorsan onu sürekli yok etmen gerekmez.O yüzden using olmadan cagrilmis. Ayrica using kullanmak icin dedigim gibi BlogContext sinifnin da IDisposable den türemis olmasi lazim

     

     

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. 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ı 

    Hocam cevapların için öncelikle teşekkürler 3.cevabını anladım ama 1-2 tam oturmadı şimdi 1.soru için

    T GetById(int id);

    T Get(Expression<Func<T, bool>> expression);

    yani Expression<Func<T, bool>> expression bu kodu diğer getbyid den farklı olarak ne yapıyor? Bi duruma göre kullanılıyosa bana gerçekci bi örnek verebilir misin?

     

    2.soru içinde IQueryable GetMany(Expression<Func<T, bool>> expression); bu kodun yazılacağı yer IRepository mi olmalı yani dediğin gibi ise bu kodu api bölümüne yazmamız gerekmiyomu çünkü irepository direk olarak db den çekicek verileri az çok ne kadar veri var tahmin edilebilir diye düşünüyorum yada bunu acaba arama yapmak için mi yazmış olabilir? Api yazmayı bilmiyorum ve katmanlı mimariye yeni başladım o yüzden sorularım çok basit yada anlamsız gelebilir

     

    ANZAK tarafından 03/Kas/17 01:48 tarihinde düzenlenmiştir

    Amatör forever
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cybermole
    cybermole's avatar
    Kayıt Tarihi: 29/Mart/2016
    Erkek

    oyle bakarken denk geldi belki faydası olur..

     

    https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/index

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MadJack
    MadJack's avatar
    Kayıt Tarihi: 07/Temmuz/2014
    Erkek
    ANZAK bunu yazdı
    unbalanced bunu yazdı 

    Hocam cevapların için öncelikle teşekkürler 3.cevabını anladım ama 1-2 tam oturmadı şimdi 1.soru için

    T GetById(int id);

    T Get(Expression<Func<T, bool>> expression);

    yani Expression<Func<T, bool>> expression bu kodu diğer getbyid den farklı olarak ne yapıyor? Bi duruma göre kullanılıyosa bana gerçekci bi örnek verebilir misin?

     

    2.soru içinde IQueryable GetMany(Expression<Func<T, bool>> expression); bu kodun yazılacağı yer IRepository mi olmalı yani dediğin gibi ise bu kodu api bölümüne yazmamız gerekmiyomu çünkü irepository direk olarak db den çekicek verileri az çok ne kadar veri var tahmin edilebilir diye düşünüyorum yada bunu acaba arama yapmak için mi yazmış olabilir? Api yazmayı bilmiyorum ve katmanlı mimariye yeni başladım o yüzden sorularım çok basit yada anlamsız gelebilir

     

    unbalanced hocamın müsadesiyle ben anlatmaya çalışayım. 

    GetById ile yalnızca id'ye göre sorgulama yapabiliyorsun adından anlaşıldığı gibi. Expression<Func<T,bool>> türünde parametre alan Get methodunda ise o sınıfın herhangi bir propertysi ile sorgulama yapabilirsin. Örneğin;

     

    var anzaklar = userRepository.Get(user => user.Name == "anzak");
    
    var yasi30danBuyukler = userRepository.Get(user => user.Age > 30);
    
    var idsi5olanlar = userRepository.Get(user => user.Id == 5);



    Görüldüğü gibi predicate kullanarak da idye göre sorgulama yapılabiliyor fakat id sorgusu çok sık kullanılabildiği için ayrı bir method yazma gereği duyulmuş.

     

    Diğer soruda api olayı kafanı karıştırmasın, ilk aşamada tüm verileri veritabanından çektiğini düşünebilirsin. Veritabanında 10 tane de veri olabilir milyarlarca da. Tüm repository classların IRepositoryi implement edeceği için hangi tabloda ne kadar veri olacağını tahmin edemeyebilirsin. Mesela tahribat.com'da tüm kullanıcıların tüm işlemlerinin loglandığı bir tablo olduğunu varsay, 15 yıldan fazla zamandır tüm kullanıcıların tüm hareketleri o tabloya yazılıyor. Şu sorgunun kaç veri getireceğini şahsen ben tahmin edemiyorum: logRepository.Get(log => log.Date.Year > 2005);


    Everyone sees just what they want to see.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    ANZAK
    ANZAK's avatar
    Kayıt Tarihi: 10/Şubat/2014
    Erkek
    MadJack bunu yazdı
    ANZAK bunu yazdı
    unbalanced bunu yazdı 

     

    şimdi net oturdu hocam teşekkürler.

    cybermole bunu yazdı

    oyle bakarken denk geldi belki faydası olur..

     

    https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/index

     

     Teşekkürler hocam ama bu kadar ingilizcem yok :\


    Amatör forever
Toplam Hit: 1306 Toplam Mesaj: 6
katmanli mimari irepository