Avusturalya’dan Merhaba,
Bu yazımda Melbourne ’de düzenli olarak yapılan meetuplardan sizlere en son katıldığım ve benimde çok faydalı bulduğum “Ten Things Every Expert Xamarin Developer Should Know” yani kendine ben Xamarin Developer’ım diyen herkesin bilmesi gereken 10 maddeyi anlatıyor. Bunlardan kısaca bahsetmeden önce listemize şöyle bir bakalım.
1- Ne zaman Xamarin.Forms kullanacağını bilmek
2- Platformlar hakkında bilgi sahibi olmak
3- Hangi kodu paylaştırabileceğini bilmek
4- XAML hakkında bilgi sahibi olmak
5- Lokalde ve serverde veriyi nasıl saklanması gerektiği hakkında bilgi sahibi olmak
6- Proje nasıl yapılandırılmalı
7- Xamarin.Forms nasıl customize yapılır
8- Uygulamanın performansını etkileyen faktörler nelerdir
9- Uygulamaların nasıl test edileceğini bilmek
10- Xamarin hakkında ulaşılabilecek kaynaklar nelerdir
Bu maddeler tabi ki daha böyle saymakla bitmez ama eğer onlar diyorsa bizede öğrenmek düşer diye düşünüyorum (Sonuçta Xamarin Üniversite eğiticileri).
Şimdi su maddeleri biraz detaylandıralım.
Xamarin.Forms ne zaman kullanmalıyız
Şöyle diyebilirsiniz ben her yazdığım uygulamada Forms kullanabilirim. Hani elimizde bir şablon olsa da bende buna göre karar versem der gibi olduğunuzu düşünüyorum. Bu isin uzmanlarıda bunu çözmüşler ve bize decision tree dediğimiz bir yapıyı sunmuşlar.
Değerli bir hatırlatma daha Xamarin.Forms ne kadar C# veya Microsoft ürünü gibide gözükse sonuçta Native tarafta ne varsa onu kullanır. Forms kullansak bile native platform özelliklerini iyi takip etmemiz gerekir.
Platformlar hakkında bilgi sahibi olmak
IOS, Android, ve Windows hepsi birbirinden farklı kullanıcı davranışlarına sahip platformlardır. Hepsinin ayrı ayrı design guidelines dedikleri ve her uygulama geliştiricinin takip etmelerini istedikleri kuralları vardır. Bu kuralların dışına çıkmak veya kendi mantığımıza göre bir şeyler üretmek uygulamamızın basarisiz olmasına sebep olur.
https://developer.apple.com/ios/human-interface-guidelines/overview/design-principles/
https://developer.android.com/design/index.html
https://developer.microsoft.com/en-us/windows/apps/design
Her sene bu platform geliştiriciler bir eventle developerlara sistemlerinin yeniliklerini anlatırlar bunların takip edilmesi bir mobile developer için çok can alıcıdır.
https://developer.apple.com/wwdc/
Hangi kodu nasıl paylaştırabileceğini bilmek
Aslında bu oldukça basit bir konsept business logic kısmı paylaştırılır. Paylaştırılır ama burada da dikkat edilmesi gereken yerler var. Mesela Shared library mi Portable Class Library(PCL) mi? hangisini kullanmalı? Bununda bir kuralı var mı?
Bu konuda kendisinde yakından tanığım Adam Pendley yazısını sizlerle paylaşmak istiyorum. https://xamarinhelp.com/portable-class-library-pcl-vs-shared-projects/
Xamarin dökümanından:
Proje geliştirirken yazdığımız bir kodu birden fazla yerde yazmaya başlamışsak, bu kodu her zaman kullanacağımız bir yere almanın vakti gelmiş demektir. Mesela verilen bir cümlede ilk harfleri büyük yazdırma bunu bir helper librarye koymak ve oradan çağırmak gayet uygun olacaktır. Bunu yaparken hazırlamış olduğumuz helper library’i başka libraryilere bağımlı yapmamak, test edilebilir bir libraryi olması açısından çok değerlidir. Çok çok özel değilse Github üzerinden paylaşılması da iyi bir davranış olacaktır.
XAML hakkında bilgi sahibi olmak
XAML’ın açılımı Extensible Application Markup Language. Yani XML <tag></tag>. Kullanıcı ara yüzünü oluşturmamızı sağlar. User Interface ile application logic kısımlarının ayrımını sağlar. Daha kolay maintenance edilir gibi. Ama aslında onunda diğer classlardan farkı yoktur; syntax olarak farklı olmasından başka. O halde XAML dilinin iyi öğrenilmesi ileri seviye uygulama yazılırken faydalı olabilir.
https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/
Charles Petzold un evolve 2016 sunumunu izlemenizi tavsiye ederim.
https://www.youtube.com/watch?v=H6UOrSyhTEE
Lokalde ve serverda veriyi nasıl saklanması gerektiği hakkında bilgi sahibi olmak
Her platformun lokalde veriyi saklamak için kendine özgü yöntemleri var. En çok bilinenleri user preference veya shared preference denilen yapı gerçi bu yapı 1Mbyte gibi sinirli bilgiler için kullanılır ama kullanım alanı çok fazladır. Bir diğeri SQLlite her platform bu yapıyı destekliyor ve kullanımı yaygındır. Bu konuda hazırlanmış nuget paketleri mevcut, ve bize düşen sadece kullanmak. Shared preference için James Montemagno’nun yazdığı Xam.Plugins.Settings ve Frank Krueger’in yazdığı sqlite-net. Tabiidir ki native tarafta ne varsa onun kullanımında herhangi bir problem yok.
Hemen hemen her uygulama mutlaka internetten veri transferinde bulunur. Bu verinin saklanması nasıl olacak neler yapılabilir. Bunun için büyük firmalar cloud servisleri geliştirmişlerdir; Amazon Web Services, Google Cloud, ve Azure gibi. Cloud servisleri başlı başına bir konu ve başka bir yazıda incelenmesi gerekir. Serverde veri saklanırken bilinmesi gereken bazı kavramlar vardır. Prefetch, caching, ve offline syncing gibi. Uzmanlarında itiraf ettiği gibi en hızlı web request hic yapilmayan yani localden okunan requesttir diyebiliriz.
O halde server tarafında hiç değişmeyen yada çok nadir değişen bilgilerin lokalde saklanması yani caching yapılması bu tür veriler için gereklidir. Prefetching ne zaman yapılır dersek. Şu sorunun cevabinin verilmesi gerekir. Kullanıcının bir sonraki davranışı kestirebiliyor muyuz? Eğer bu sorunun cevabi evet ise Prefetching yani kullanıcının görmeyi isteyeceği verileri serverdan isteyip kullanıcı için hazırda bekletebiliriz. Gelelim offline syncing olayına bunu da başarmak çok zahmetli ama faydası büyük.
Şu anda birçok uygulama bunu yapıyor. Mesela internet kapatıp WhatsUp’tan mesaj yazın mesajı yazabilirsiniz ve size herhangi bir hata vermez. Internet geri geldiğinde mesainizi ulaştırır. Lokal uygulamayı kapatsanıza mesajınız orada durmaya devam eder. Offline sync iki database kullanır. Bir tanesi serverda diğeri lokalde. Eğer bağlantı yoksa lokalde veriyi saklar bağlantı gelince servera gönderirdir. Tabi olay burada anlatıldığı kadar kolay bir iş değildir. Azure Easy Table bu konuda iyi bir çalışma bakmanızı tavsiye ederim.
Peki resimler nasıl saklanmalı? Bu konuda nasıl davranacağız? İşte Caching mekanizması tam burada da devreye giriyor. Resimler serverdan geldikten sonra lokalde kaydedilip lazım oldukça lokalden okunur. Bu işlemde de resimlerin ne kadar cachede duracağı tamamen uygulamanızın doğasıyla alkalıdır. Bununla ilgili Danial Luberda ve Fabien Molinet tarafindan yazilan nuget paketi Xamarin.FFImageLoading iyi iş görüyor diyebiliriz.
Sonuç olarak bu konuda bilgi sahibi olmak daha iyi uygulamalar yazmamıza sebep olacaktır.
Proje nasıl yapılandırılmalı
Xamarin platformunda kullanılan ve hemen hemen herkes tarafından benimsenen yapı aşağıdaki gibidir.
Forms projeler:
- Helper Code(PCL veya Shared)
- Shared Business Logic Code (PCL veya Shared)
- Xamarin.Forms Presentation(PCL)
- Xamarin.Forms Host Projects
- Unit Test
- UI Test Project
Native projeler:
- Helper Code(PCL veya Shared)
- Shared Business Logic Code (PCL veya Shared)
- Native IOS ve Android Codes
- Unit Test
- UI Test Project
Xamarin.Forms nasıl customize yapılır
Xamarin.Forms da nihayetinde native controllers kullanılarak kullanıcıya gösteriliyor. Default olarak bize sunulan controller sonuçta bir yere kadar bize yardımcı oluyor. Bir noktadan sonra bunları daha güzel bir şekilde göstermemiz gerekiyor. İşte bu noktada Renderers ve Effects konusunu öğrenmeye itiyor. Bu konuda aşağıdaki linklerde rahatlıkla bulunabilir.
https://developer.xamarin.com/guides/xamarin-forms/custom-renderer/
https://developer.xamarin.com/guides/xamarin-forms/effects/
Uygulamanın performansını etkileyen faktörler nelerdir
Bu konu hakkında da bilgi sahibi olmak bizleri son adımda daha efficient uygulamalar yazmamıza sebep olur. Yalnız su hataya düşülmemesi gerekir: her turlu performans hilesini biliyorum ve yazdığım uygulamada hepsini kullanacağım. Yazdığım kod uçacak.
Zamanla yarıştığımızı unutmadan yapabildiğimiz en hızlı üretimi yapmalı ve müşteriyi memnun etmeliyiz. Performansı düşünmek çok güzel bir şey ama bazen öyle olmamakta. Uygulamanızı gereksiz hızlı yapmış olabilir ve zaten bu kadar zahmet harcamasanıza aşağı yukarı ayni performansı gösterecek uygulamaya daha fazla zaman ayırmış olabilirsiniz.
Burada bilinmesi gereken nokta neler uygulamanızın performansını etkiler ve bunlar nasıl düzeltilir. Ve problemler ortaya çıktıkça çözmek daha ortada olmayan bir sorun için zaman harcamamaktır.
https://www.youtube.com/watch?v=-u8fG_0bRYY
https://www.youtube.com/watch?v=RZvdql3Ev0E
Uygulamaların nasıl test edileceğini bilmek
Uygulamamızı nasıl test edeceğimizi ve hangi araçları kullanacağımızı iyi bir şekilde öğrenmiş olmamız daha hızlı development cycle acısından bize avantaj sağlar. Çoğu zaman test işlemini manual olarak yapıyor olsakta bunu otomatikleştirmek hem bizim için hem uygulamamız için hayati önem taşıyor.
Peki uygulamamı test etme işlemini nasıl yapacağım. Burada bilinmesi gereken bazı test terimleri var ve öncelikle bunlar hakkında bilgi edinmemiz gerekir. Bunlar unit test, integration test, acceptance test, ve UI test olarak önümüze çıkar. Hepsi bu değil tabi ki ama bunlar en yaygın olanlar ve hemen hemen her firma bu yöntemleri kullanıyor.
Xamarin hakkında ulaşılabilecek kaynaklar nelerdir
Yazılım geliştiriciler olarak stackoverflow vazgeçilmez yerlerden birisi ama her yazılanın bizim sorunlarımıza cevap vermesi mümkün değil. Benim faydalandığım bazı kaynaklar:
https://developer.xamarin.com/api/
https://developer.xamarin.com/recipes/
https://channel9.msdn.com/Shows/XamarinShow
https://developer.android.com/index.html
http://www.xamarinturkiye.com/
Yukarıda yazılan her bir madde kendi içerisinde saatler alan bir öğrenme faaliyeti gerektirir. Aşağı yukarı nelere öncelik verilmesi gerekiyor, bunun hakkında bilgi sahibi olmuş oldunuz. Benim nacizane görüşlerimden biride ne yaparsanız yapın best practise yapın. Mesela zamanı serverda tutma gibi. En iyi yöntemi nedir diye araştırın ve kullanın.
Mutlu kod yazmalar
Yorum Gönder