Bütünsel Yaklaşımla(BPPB) Flutter Firebase İşlemleri​

Bütünsel Yaklaşımla(BPPB) Flutter Firebase İşlemleri

not: bu makalede sıkça geçen BPPB(Bütünsel yaklaşım) bir önermedir. Kendi çıkarımlarımdan oluşturduğum kavramsallarştırmalar içerir.

Bütünsel yaklaşım..Bütünden Parçaya – Parçadan Bütüne (BPPB):

Bütünsel yaklaşım(BPPB) mevcut durumun bir manzarasını verir. Parçanın bütündeki yerini daha konuyu yeni öğrenmeye başlarken öğrenmiş olursunuz. Bu sayede daha sonra öğreneceklerinizi bu resmin eksik kısımlarına yerleştirebilirsiniz. Daima konrol sizde olur ve  bilginin override 🙂 olmasının önüne geçersiniz… Yazılım diliyle de bir çeşit soyutlama elde edersiniz…

Eğer bir puzzle ın bitmiş halini görmüş olsaydınız resmin çok karmaşık olmasının bir önemi kalırmıydı?

bir çoğunuzun dikkatini çekmiştir  bu sitedeki menüler bütünden parçaya parçadan bütüne (BPPB) yaklaşımıyla tasarlanmıştır.

ilk başta çoğunuza garip gelmiş olabilir. Nedeni, klasik eğitimde yediğimiz formattan kaynaklanır. klasik eğitim parçadan bütüne gitmeye çalışır ve ayrınya boğar… işin en sinir bazucu tarafı bu öğretim şeklini farketmeden kabullendiğimiz için öğretirken bizde aynı yöntemi kullanırız. internette herhangi bir konuyu araştırdığınızda bu teknikle yazılmış (yabancı kaynalarda dahil) makaleler görürüsünüz ve konunun sınırlarını öğrenebilmek, parçaları birleştirebilmek için hiçbir zaman tek bir makale yetmez …

Bütünsel Yaklaşım Aşamaları

1.Bütünsel Çıkarım (BÇ)
Konunun kaba taslak bir özeti / alan taraması olarak özetlenebilir.  Burada amaç kaba çıkarıma hazır hale getirmektir.  Mümkün olanı en geniş ve öz biçimde içermeli ayrıntıyı dışlamalıdır.

Bütünsel Çıkarım aslında bir sınırlandırmadır.

Bütünsel yaklaşımda ilk aşama mutlaka bir Bütünsel Çıkarım (BÇ) aşamasıyla başlar ve bir çok yerde tekrar edebilir.
Bütünsel çıkarım sonucunda konuyla ilgili bir şey söylenmelidir; Bütünsel Çıkarım Cümlesi(BÇC)

Bütünsel Çıkarım sonucu bir bütünsel çıkarım cümlesi elde ederiz ; Bütünsel Çıkarım (BÇ) => Bütünsel Çıkarım Cümlesi(BÇC).

2.Bütünsel Çıkarım Cümlesi(BÇC)

Bilginin ayrıntılı içeriğine erişmek(hatırlamak) için bir referans ve perspektif sunan, konuyu en kısa şekilde özetleyen, kapsayıcı ve sınırlayıcı, söylenebilecek en kısa sözdür.(ekmek kırıntıları, tiyo, spoiler :), ve yeni fikirler)

Bütünsel çıkarım cümlesi bilginin daha ayrıntılı haline bir referanstır.

Bütünsel yaklaşım aşamalarından herhangi birinde bir bütünsel çıkarım cümlesi elde ettiğimizde bir parça seçmek durumunda kalırız;Ey Yaygın Kritik Parça Tespiti (EYKPT) .
Örneğin konun bir aşaması BÇ ve BÇC daha sonra bir EYKPT daha sonra tekrar bir BÇ gibi…

3. Ey Yaygın Kritik Parça Tespiti (EYKPT) 

Kritik parçalardan en yaygın kullanılanı. Puzzle nin en yaygın ve resmi tahmin etmeyi sağlayan mevcut aşamaya göre en önemli parçasıdır.
Bu parça resmin görece boş kısımları olamamalı, örneğin manzaradaki gökyüzü yada denizin parçası gibi değil, resmi tahmin etmeyi sağlayan en kritik fakat olabildiğince de yaygın bir parçası olmalı. Daha sonra bu kritik parçaya BÇ uygulanır.
BÇ => BÇC => EYKPT => BÇ => BÇC => EYKPT => BÇ => BÇC …. özümseme…yeni filkir yeni bilgi üretimi

En Yaygın Kritik Parça, ilişki sayısının en fazla olduğu yerde bulunur.(kümelerin kesişimi, kavşaklar, altın..)

1.Firestore sınıfı için Bütünsel Çıkarım (BÇ):

class Firestore {
///YERLEŞİKLER:
///Firestore işlemlerini gerçekleştirmeyi sağlayan static get metodu, Firestore nesnesini(instance) yani kendisini döndürür.
 static Firestore get instance => Firestore();

 /// FirebaseApp :  Firebase e bağlı uygulamayı FirebaseApp cinsinden döndürür.
  FirebaseApp get app;

  //settings : ayarlar
  Future settings({bool persistenceEnabled, String host,  bool sslEnabled, int cacheSizeBytes});


///REFERANSLAR :
    ///1. kolleksiyon referansı: CollectionReference,
    /// 2. grup kolleksiyonu referansı:Query,
    /// 3. döküman referansı: DocumentReference

        // CollectionReference : path ver geriye collecsiyon refenası al
        CollectionReference collection(String path);

        //  // Query : path ver geriye collecsiyonGrup refenası Query al
        Query collectionGroup(String path);

        //DocumentReference :  path ver DocumentReference al
        DocumentReference document(String path);


///TOPLU OPERASYONLAR: batch,Transaction

  ///Atomic işlemler:Bir dizi atomik işlemde, ya tüm bir dizi toplu işlemler başarılı olur uygulanır ya da biri başarısız olduğunda tümü başarısız olur hiçbiri gerçekleştrilmez!.
  ///İki tip atomik işlem vardır.
  ///1. Batched Writes:bir veya daha fazla dökümana  update, delete ve set işlemlerini tek seferde-atomic olarak yapma işlemidir.Okuma-read Hariç!( update, delete ve set yazma işlemi olarak kabul edilir!)
  ///2. Transactions: bir veya daha fazla döküman üzerinde read, update, delete ve set işlemlerini tek seferde-atomic olarak yapma işlemidir. Okuma-Read dahil!

///1.batch(...):
  ///bir okuma (yani read olarak kabul edilen) işlemi içermeyen!! ama bir dizi update, delete ve set gibi (ki hepsi write-yazma olarak kabul edilen) toplu işlemleri
  /// tek bir işlemde gerçekleştiren metod.
  /// İşlemler commit işlemi çağrılana kadar icra edilmez!!!
  /// Bu işlemler: delete, setData, updateData dır. en son commit çağrılır.
              WriteBatch batch(); ///WriteBatch nesnesi döndürür bu nesne;
                  /// A [WriteBatch], tek bir birim olarak bir den çok işlemi gerçekleştirecek bir dizi yazma işlemi sağlar.
                  /// [WriteBatch] üzerinde yapılan işlemler siz [commmit] yapana kadar geçerli olmaz.
                  /// [WriteBatch] tamamlandığında üzerinde başka işlem yapılamaz ve tekrar gerçekleştirilemez.
                  void delete(DocumentReference document); // silme
                  void setData( DocumentReference document, Map<String, dynamic> data, {bool merge = false} ); // ekleme
                  void updateData(DocumentReference document, Map<String, dynamic> data); //güncelleme işlemi
                  Future commit(); //tüm işlemlerin tek seferde gerçekleştirilme işelemini uygular.En son çağrılır.


///2.runTransaction(..)
          ///runTransaction yöntemi içerisine transactionHandler(bir fonksiyon tanımı tipi) ve gecikme zamanı(varsayılanı 5 saniyedir) alır.
         ///transactionHandler bu Firestore nesnesinin içerisindeki bir metod tanımının referansını alır!!! (calback fonksiyonlar),
         /// Kısaca bu fonksiyon şöyle tanımlanmalıdır:fonksiyonun baş kısmı parametre olarak bir Transaction tipinden paramerte almak zorundadır.Şöyle (Transaction transaction){ ...}
         /// gövde kısmında, transaction nesnesi halihazırda oluşturulmuş olacağı için bu transaction nesnesini kullanarak istenen read da dahil atomic toplu işlemeler gerşekleştitilebilir.
              Future<Map<String, dynamic>> runTransaction(TransactionHandler transactionHandler, {Duration timeout = const Duration(seconds: 5)});

                ///Transaction sınıfının gerçekleştirebildiği işler: Firestore.instance.runTransaction((Transaction transaction){ transaction.get,set,update,delete });
                  Future get(DocumentReference documentReference);//READ!!!
                  Future set( DocumentReference documentReference, Map<String, dynamic> data)://insert ekleme
                  Future update( DocumentReference documentReference, Map<String, dynamic> data) ;//güncelleme
                  Future delete(DocumentReference documentReference) ;//silme



} 

2. flutter Firestore sınıfı için Bütünsel Çıkarım Cümlesi(BÇC):
flutter Firestore sınıfı, toplu operasyonlar için batch ve runTransaction yöntemlerini, tekil operasyonlar için döküman ve kolleksiyonların referansını veren yöntemleri içerir.

Toplu operasyonlar gerçekleştirmek istiyorsak iki yol var;
batch,Transaction
batch: read yani okuma içermeyen toplu operasyonlar için.
Transaction: read yani bir okuma da içeren toplu operasyonlar için.

Tekil operasyonlar için ise referansları veren 3 yöntem içerir:
1. kolleksiyon referansını verir :      CollectionReference collection(String path)
2. grup kolleksiyonu referansını verir:      Query collectionGroup(String path)
3. döküman referansını verir:     DocumentReference document(String path)

Görüldüğü gibi bu bir sınırlandırmadır. Konunun sınırları artık az çok belirlenmiş olduk. flutter Firestore sınıfı için genel manzara böyle şimdi pazzle ı dolduralım.

3.Ey Yaygın Kritik Parça Tespiti (EYKPT) : DocumentReference
Bu kısımda en yaygın başvurulan DocumentReference gibi duruyor.

4.DocumentReference sınıfı için Bütünsel Çıkarım (BÇ):
class DocumentReference {

  ///YERLEŞİKLER
      ///DocumentReference sınıfı bir Firestore referansı içerir.
      /// Firestore nesnesi üzerinde  document(..) yöntemi ile bir DocumentReference getirdiğimizde, bu DocumentReference nesnesi içinden tekrar aynı Firestore nesnesine erişileblir.
      final Firestore firestore;

      // dokumanın veritabanındaki/firestore deki yolu
      String get path

      /// Bu dükümanın kolleksiyonun içindeki, atanmış yada otomatik oluşturulmuş id si
      String get documentID


  ///REFERANSLAR
          ///ust-parent collection
          /// bağlı olduğu kollecsiyonu CollectionReference türünden döndürür.
          /// CollectionReference ile : bu dökümanın bağlı olduğu kollecsiyonun Id sine ve bu kolleksiyonun bağlı olduğu üst-parent dökumana ulaşabiliriz.
          /// bu döküman -> bağlı olduğu kolleksiyonu CollectionReference türünden verir
          CollectionReference parent()

          ///Bu doküman içerisinde işaret edilem bir kolleksiyonun referansını döndürür. alt-child kolleksiyonlardan biri
          CollectionReference collection(String collectionPath)

  
  ///OPERASYONLAR

          ///  bu dökümanı firestore de okuma, eğer dökuman yok ise okuma başarısız olur null döndürür.
          ///  döküman var ve başarılı bir okuma işlemi ise geriye Future tütünde  DocumentSnapshot  nesnesi döndürür. 
          Future get({platform.Source source = platform.Source.serverAndCache})

          // bu konumdaki dokumandaki değişikliğin bildirimi-haber verilmesi. akış türünde değişikliği dinleyebilmeyi sağlar.
          // get ten farkı her değişiklik gerçekleştiğinde son değişmiş değeri alabilirsiniz. get te ise o anlık değeri getiriir.
          Stream snapshots({bool includeMetadataChanges = false})


          //bu dökümana yazma işlemi
          //eğer döküman henüz yok ise oluşturulur.
        //merge/birleştir true ise ve hali hazırda böyle bir data var ise datayla birleştirilir. merge/birleştir false ise data ayrı olarak eklenir.varsayılan false.
          Future setData(Map<String, dynamic> data, {bool merge = false})

          ///data guncellemesi - eğer döküman yok ise guncelleme başarısız olur
          Future updateData(Map<String, dynamic> data)

          ///bu döküman tarafından temsil edilen dökümanı database te siler
          Future delete();



  ///YERLEŞİK OPERASYON
      // iki DocumentReference nesnesinin aynı nesne olup olmadığı bu yöntemle belirleniyor.Kısaca iki döküman aynı döküman mı?
      ///(operator ==(dynamic o)  buradaki  "o" diğer nesneyi temsil eder.
      ///diğer nesne tipi(o) bir DocumentReference tipinde mi (dokuman mı)
      ///ve diğer nesnenin içinde barındırdığı firestore nesnesiş, bu(this) DocumentReference nesne içindeki firestore nesnesiyle aynımı(firestore nesnlerinin refleri aynımı)
      ///ve diğer nesnenin içindeki path ile bu nesnenşn ( bu DocumentReference) path i aynımı.(dokuman yolu aynı mı)
      ///Hepsi koşulu sağlarsa aynı DocumentReference(döküman) nesnesidir.(operator ==(dynamic o) true ise aynı dökümandır)
      @override
      bool operator ==(dynamic o) =>
          o is DocumentReference && o.firestore == firestore && o.path == path;

} 

5.DocumentReference sınıfı için Bütünsel Çıkarım Cümlesi(BÇC):
DocumentReference sınıfı path, id, üst kolleksiyon referansı ve kendisine bağlı alt kollensiyonların referensları gibi daha çok bu dökümanın konumu ve kimliğine ait bilgileri sağlayan
yöntemler ile firestorde doğrudan yapılabilen crud operasyonlar olarak isimlendirebileceğimiz okuma, değişikliği dinleme, veri ekleme, güncelleme ve silme yöntemlerini ve ilişkili firestore nesnesini içerir.

Bu DocumentReference sın firestor daki konumu ve kimliğine ait bilgiler:
path : String get path()
id : String get documentID()
üst kolleksiyon referansı : CollectionReference parent()
kendisine bağlı hrehangibir alt kollensiyonun referansı : CollectionReference collection(String collectionPath)

DocumentReference içinden firestorda doğrudan yapılabilen operasyonlar:
okuma : Future get(..) ,
değişikliği dinleyerek okuma : Stream snapshots(..),
veri ekleme : Future setData(Map data)
güncelleme : Future updateData(Map data)
silme : Future delete()

dökümanı okuma: Future get, Stream snapshots
DocumentReference sınıfı bu dokumanın verisini okumayı-firestore dan getirme işlemini, tek seferlik-anlık ve her değiştiğinde-sürekli olacak şekilde iki farklı yöntemle sağlar.
get metodu veritabanındaki her sorguda anlık görüntüsüne erişmeyi bir Future türünden getirerek sağlarken,
snapshots yöntemi, her değişikliği haber veren dinlemeyi sağlayan akış Stream türünden getirerek sağlar.
Veri akleme: firestore de bu dökümana veri ekleme işlemi datanın map şeklinde setData ve updateData yöntemleriye gönderilerek sağlanırken, silme işlemi her hangibir paramaetre almayan delete yöntemiyle yapılır.
Bu döküman(DocumentReference) bir firebase nesnesiyle elde edilmiş ve kendisine yine aynı firebase nesnesi gömülmüş olduğu için ayrıca bu firebase nesnesi private olmadığı için çok esnek bir kullanım sağlar. ilişkili firebase nesnesinin mümkün tüm içeriğine erişim sağlayabilir.

Şimdi burada biraz soluklanıp elimizdekilere bir bakalım.

2 adet BÇ
2 adet BÇC
2 adet EYKPT
Bunlardan Bütünsel çıkarım cümlelerini aldığınızı düşünün iki adet cümle.
Size ilşkili bütünsel çıkarımlarının referanslarını verecektir. Bütünden parçaya…

Bütünsel çıkarım cümlesi bilginin daha ayrıntılı haline bir referanstır.

BÇ ye indiğinizde EYKPT  ye ulaşırsınız.. Parçadan bütüne..

Bütünsel yaklaşım zihninizde hatırlaması ve ilişkilendirilmesi kolay genel şablonlar sunar…

Şimdi kaldığımız yerden devam diğerleri konusunda az çok fikrimiz var en kritik parça DocumentSnapshot gibi duruyor.

6.Ey Yaygın Kritik Parça Tespiti (EYKPT) :DocumentSnapshot

7.DocumentSnapshot sınıfı için Bütünsel Çıkarım (BÇ):
class DocumentSnapshot {
  ///Bir DocumentSnapshot nesnesi , Firestore da veritabınındaki bir dökümandan okunan verileri içerir.
/// verilere,   data özelliğiyle veya belirli bir alana erişmek için key  kullanılarak elde edilebilir.
 
///YERLEŞİKLER

    /// snapshot dökümanının id sini getirir
    String get documentID  

     /// Döküman varsa "true" değerini döndürür.
      bool get exists 



///REFERANSLAR
   ///DocumentSnapshot nesnesiyle ilişkili dökümanın DocumentReference türünden referansı..Burada ise  ilişkili firestore nesnesi yerine ilişkili DocumentReference verilmiş.
    DocumentReference get reference  

    /// Dökümanın kaynağıda ve localde değişiklik olup olmadığı ile  ilgili meta/üst verileri içerir.
   /// Döküman localde yada kaynakta değişikliğe uğramış olabilir.
   /// (Örn:internet kesintisinde localde yada başka kullanıcı tarafından bu nesnedeki datanın güncellenmesi gibi bilgiler, sanırım şimdilik anladığım bu )
    SnapshotMetadata get metadata

      

 ///Nihayet VERİNİN HAM HALİNİN ELDESİ
    ///Dökümanın o anlık görüntüsünün tüm verilerini getirir
    Map<String, dynamic> get data 
    
    /// Anlık görüntüden tek tek değerleri okur, Key ver dökümanın alanından değerini getir..gibi
    dynamic operator [](String key) => data[key];

 
} 

8.DocumentSnapshot sınıfı için Bütünsel Çıkarım Cümlesi(BÇC):

DocumentSnapshot sınıfı ilişkili dokumanın id sini (id), var olup olmadığını (exists), ilişkili dokumanın referansını (referans), anlık bilginin güncel halinde bir değişiklik olup olmadığını(metadata) öğrenebileceğimiz get metodları sunarken, verinin anlık olarak bütün halini map(data) şeklinde verir ayrıca verinin alanlarınada key yoluyla erilebilmesini sağlayan operatör içerir.

DocumentSnapshot sınıfı veritabanındaki ham bilginin sarmalandığı sınıftır. En nihayetinde firestore deki veritabanaındaki ham veriye bu sınıf yoluyla dokunuruz.

Biraz yukarılara çıkma vakti..dökümanları bir arada tutan CollectionReference diğer bir kritik parça.

9.Ey Yaygın Kritik Parça Tespiti (EYKPT) :CollectionReference

10.CollectionReference sınıfı için Bütünsel Çıkarım (BÇ):

class CollectionReference extends Query {

//YERLEŞİKLER
      /// referansın id si
      String get id  

///bu kolleksiyonun veritabaındaki yolunu verir
      String get path 
 
 ///REFERANSLAR
      ///Kolleksiyonun ait olduğu(parent) dökümanı DocumentReference tipinde verir. bu  kolleksiyon root kolleksiyon(en üst) ise null döndürür!
      DocumentReference parent() 


///OPERASYONLAR 
/// kolleksiyona döküman ekleme:
    ///path/yol ile sağlanan bu kolleksiyonun içerisindeki bir dökünanı DocumentReference türünde verir
    ///path/yol yok ise otomatik oluşturulmuş id kullınılır.
      DocumentReference document([String path])  


/// kolleksiyona doğrudan data ekleme:
    /// bir map data yı bu kolleksiyon içerisine, otomatik olarak üretilmiş bir benzersiz id ye sahip bir dökümanı oluşturarak ekler ve bu dökümanın referansını DocumentReference olarak döndürür.
    /// oluşturulan benzersiz id bir zaman damgası ön eki içerir bu sayede bu kolleksiyonun içerisindeki dökümanlar kronolojik olarak saklanmış olur.
      Future add(Map<String, dynamic> data)
} 

bağlı olduğu paren dökümanına eriş, : DocumentReference parent()
alt dökümanlarına eriş, yok ise oluşturarak eriş : DocumentReference document([String path])
doğrudan dokumanını oluşturupp data ekle : Future add(Map<String, dynamic> data)

11.CollectionReference sınıfı için Bütünsel Çıkarım Cümlesi(BÇC):CollectionReference sınıfı kendi kimliğine ve konumuna ait id, path bilgisini ve parent dokumanın referansını döndüren yöntemlere sahiptir. Ayrıca bir dökümanına erişirken oluşturabilmeyi sağlayan  document([String path]) metoduna ve  data eklerken dökümannını oluşturabilmeyi sağlayan add metoduna sahiptir.  Her ikiside dökümanın referansını döndürür. Burada en öenmli şey Query sınıfından miras alıyor oluşu bu tüm cümleyi değiştirir !!!

tekrar BÇC yi kuaracak olursak : CollectionReference sınıfı firestorede hermen hemen her türlü veritabanı işlemini derinlemesine yapabilme imkanına sahiptir.

Burada belkide en kritik parça Query  sınıfıydı ziyani yok devam…Bu tür durumlara yol açmamak için konuya girmeden önce bir genel tarama yapmak çok yararlı olabilir. Yinede elimizde BÇ -> BÇC, EYKPT aşamaları var, bunları tek tek çıktılarını alırsak lego gibi yer değiştirebilme imkanına sahibiz. Bu modelin avantajlarından biri..

gelelim Query  sınıfına..

12.Ey Yaygın Kritik Parça Tespiti (EYKPT) :Query 

13.Query sınıfı için Bütünsel Çıkarım (BÇ):

// 1.000.000 >= (bir milyona eşit ve büyük şehirleri seç)
// db.collection("şehirler").orderBy("nüfüs").startAt(1000000);
// start : taBan
// end : taVan
// at : Dahil
// after : Sonra
// before : Önce

///Query sınıfı belirli bir konumdaki veriler üzerindeki bir sorguyu temsil eder.
class Query {

   final Firestore firestore;

   Map<String, dynamic> buildArguments()

//döküman reflerinin listesini ve dinleyen tutan QuerySnapshot getir
   Stream snapshots({bool includeMetadataChanges = false})

//döküman reflerinin listesini tutan QuerySnapshot getir
   Future getDocuments({ platform.Source source = platform.Source.serverAndCache, })

//bu sorguya ait kolleksiyon referansıı
   CollectionReference reference()

//hangi alanı + filtreleyerek
   Query where( dynamic field, { dynamic isEqualTo, dynamic isLessThan,dynamic isLessThanOrEqualTo,dynamic isGreaterThan,dynamic isGreaterThanOrEqualTo,dynamic arrayContains,List arrayContainsAny,List whereIn,bool isNull,})

//alana göre sırala(varsayılan artan 1..10 , descending = true ise 10..1)
   Query orderBy(dynamic field, {bool descending = false})

//START - TABAN - SONRAKİLER
   //dahil - at
   Query startAt(List values)
   Query startAtDocument(DocumentSnapshot documentSnapshot)

   //hariç - after
   Query startAfter(List values)
   Query startAfterDocument(DocumentSnapshot documentSnapshot)

//END - TAVAN - ÖNCEKİLER
   //dahil - at
   Query endAt(List values)
   Query endAtDocument(DocumentSnapshot documentSnapshot)

  //hariç - Before
   Query endBeforeDocument(DocumentSnapshot documentSnapshot)
   Query endBefore(List values)

//getirilecek döküman sayısı
   Query limit(int length)
} 

14.Query sınıfı için Bütünsel Çıkarım Cümlesi(BÇC):Query sınıfı belirli bir konumdaki veriler üzerinde en geniş sorgu yöntemlerine sahip sorgu sınıfıdır.

15.Ey Yaygın Kritik Parça Tespiti (EYKPT) :QuerySnapshot

16.QuerySnapshot sınıfı için Bütünsel Çıkarım (BÇ):

/// A QuerySnapshot sıfır veya bir çok DocumentSnapshot nesnesi içerebilir
class QuerySnapshot {

  /// anlık DocumentSnapshot ların bir listesi
  List get document 

  ///değişikliğe uramış DocumentChange nesnelerinin bir listesi
  ///uygulamada firestore yapılan ilk sorgu sonucu bilgiler ilkkez getirildiyse -ilk snapshot ise bütün dökümanlar listeye eklenir- 
  List get documentChanges 

// değişiklikleri kaydeden SnapshotMetadata nesnesi dödürür
  SnapshotMetadata get metadata  
  
} 

17.QuerySnapshot sınıfı için Bütünsel Çıkarım Cümlesi(BÇC): QuerySnapshot bir sorgu sonucu dönen dökümanları ve bu dökümanlardan değişikliğe uğramış olanalarını DocumentSnapshot listesi türünde veren yöntemler içeren sınıftır.

Tüm Bütünsel Çıkarım Cümleleri(TBÇC)
 
Firestore: Toplu operasyonlar için batch ve runTransaction yöntemlerini, tekil operasyonlar için döküman ve kolleksiyonların referansını veren yöntemleri içeren ana başvuru firestore basvuru sınıfı.

DocumentReference: 
path, id, üst kolleksiyon referansı ve kendisine bağlı alt kollensiyonların referensları gibi daha çok bu dökümanın konumu ve kimliğine ait bilgileri sağlayan 
yöntemler ile firestorde doğrudan yapılabilen crud operasyonlar olarak isimlendirebileceğimiz okuma, değişikliği dinleme, veri ekleme, güncelleme ve silme yöntemlerini ve ilişkili firestore nesnesini içerir.
 DocumentSnapshot: İlişkili dokumanın id sini (id), var olup olmadığını (exists), ilişkili dokumanın referansını (referans), anlık bilginin güncel halinde bir değişiklik olup olmadığını(metadata) öğrenebileceğimiz get metodları sunarken, verinin anlık olarak bütün halini map(data) şeklinde verir ayrıca verinin alanlarınada key yoluyla erilebilmesini sağlayan operatör içerir. DocumentSnapshot sınıfı veritabanındaki ham bilginin sarmalandığı sınıftır. En nihayetinde firestore deki veritabanaındaki ham veriye bu sınıf yoluyla dokunuruz.
 CollectionReference: kendi kimliğine ve konumuna ait id, path bilgisini ve parent dokumanın referansını döndüren yöntemlere sahiptir. Ayrıca bir dökümanına erişirken oluşturabilmeyi sağlayan  document([String path]) metoduna ve  data eklerken dökümannını oluşturabilmeyi sağlayan add metoduna sahiptir.  Her ikiside dökümanın referansını döndürür. Burada en öenmli şey Query sınıfından miras alıyor oluşu bu tüm cümleyi değiştirir !!!
tekrar BÇC yi kuaracak olursak : CollectionReference sınıfı firestorede hermen hemen her türlü veritabanı işlemini derinlemesine yapabilme imkanına sahiptir.
 
Query:  belirli bir konumdaki veriler üzerinde en geniş sorgu yöntemlerine sahip sorgu sınıfıdır.
QuerySnapshot: Bir sorgu sonucu o anlık dönen dökümanları ve bu dökümanlardan değişikliğe uğramış olanalarını DocumentSnapshot listesi türünde veren yöntemler içeren sınıftır.
 
Tüm Bütünsel Çıkarım Cümleleri(TBÇCD) için Damıtma:
 

Firestore: Firestore bağlantı çekirdek sınıf.

Referanslar:
DocumentReference:bir Firestore veritabanındaki döküman referansını ifade eder ve o konuma yazmak, okumak veya dinlemek için yöntemler içerir.  
CollectionReference:bir Firestore veritabanındaki kolleksiyon referansını ifade eder. döküman eklemek, döküman referanslarını almak ve döküman sorgulamak için metodları içerir. Ayrıca Query  öğesinden miras alınan yöntemleri içerir.
 
Sorgu:
Query:  belirli bir konumdaki veriler üzerinde en geniş sorgu yöntemlerine sahip sorgu sınıfıdır.
 
Sorgudan Dönenler:
QuerySnapshot: Bir sorgu sonucu o anlık dönen dökümanları ve bu dökümanlardan değişikliğe uğramış olanalarını DocumentSnapshot listesi türünde veren yöntemler içeren sınıftır.
DocumentSnapshot: Firestore veritabanınızdaki bir belgeden okunan verileri içerir.
 
Damıtma Cümlesi(DC): firestore’a referanslardan biriyle bağlanıp bir sorgu gerçekleştirirsek sorgudan dönenleri alırız.
 
Tüm çaba resmin bu berraklığına ulaşmak içindi…
 
not: burada damıtmayı iyi bir alan taraması yaparak en başından ortaya çıkartabilirdik…

Bir cevap yazın