Merhaba 👋 , bugün #Flutter’da factory constructor’ları nasıl kullandığımdan bahsetmek istiyorum ⬇️
İlk olarak, constructor çeşitlerinden bahsedelim kısaca. Temelde, generative ve factory olmak üzere iki çeşit constructor vardır. Generative constructor'lar, her zaman ait oldukları sınıfın yeni bir instance’ını döndürürler.
Factory constructor’ların da bir obje döndürmesi gerekmektedir. Ancak döndürülecek obje bir generative constructor'a göre daha esnektir.
Bir generative constructor'da döndürülecek obje, initializer listesinden sonra kesinleşmiş olur. Ancak factory constructor, bize döndürülecek objeye body içerisinde karar verebilmemizi sağlar.
Obje, body içerisinde belirlendiği için oluşturulan objeyi döndürmek için ‘return’ kullanmamız gerekmektedir. Peki hangi durumlarda factory kullanmak işimize yarayabilir:
1. #Dart dokümantasyonu, her zaman yeni bir objeye ihtiyacımız olmadığında factory kullanabileceğimizi söylüyor. Örneğin, yeni bir obje oluşturmanın masraflı olduğu durumlarda, eldeki objeyi kullanmak için (caching gibi). Bu durumda factory kullanmak daha verimli olabilir.
2. Objenin field’larına atanacak değer kompleks bir logic içeriyorsa ve bunu initializer listesinde halletmek zorsa/mümkün değilse. Örneğin, json'dan objeye çevirirken karışık logicleri halletmek için. Asagida, json’dan gelen değerler, direkt olarak parse edilmiş.
Burada ise, json’dan gelen değerler üzerinde işlem yapıldıktan sonra obje yaratılmış. Bu sekilde kod, hem daha okunaklı olmuş hem de initializer listesinde halledilemeyecek logicler halledilmiş.
3. Sınıfın bir instance’ini döndürmek yerine subclass’ını döndürmek istediğinizde (factory pattern gibi). Her metodun döndürdüğü bir tür vardır, constructor’ın return türü de sınıfın türüdür.
Bir metoddan, o metodun return türünü sağlayan herhangi bir tür döndürülebileceği gibi, factory constructor'dan da sınıfın türüne uyan herhangi bir obje döndürülebilir. Bu obje, sınıfa ait bir instance olabileceği gibi, subclass'a ait bir instance da olabilir.
4. Singleton pattern kullanmak istediğimizde. Her zaman yeni bir objeye ihtiyaç duymadığımız da factory kullanabiliriz demiştik. Factory constructor'lar, döndürülecek objeyi body'de oluşturdukları için, kontrol akışlarını kullanarak singleton pattern'i implement edebiliriz.
Böylece, sadece ilk seferde yeni bir obje yaratıp, diğer seferlerde aynı objeyi döndürebiliriz. Ayrıca bu yolla, singleton pattern implementasyonunu da gizlemiş oluruz.
Yani normalde, StorageRepository.instance yada StorageRepository.getInstance() diyerek ulaştığımız singleton instance'ına artık StorageRepository() diyerek ulaşabiliriz.
Son olarak, factory constructor icinde ‘this’ keyword’üne erişim yoktur. Bu nedenle sınıfın instance memberlarına (metod ve değişkenlere) erişilemez. Ancak, constructor içerisinde bir obje yaratılıp bu şekilde member’lara erişim sağlanabilir.
• • •
Missing some Tweet in this thread? You can try to
force a refresh