Platformlar Arası Uygulama Örnek Olay İncelemesi: Tasky
TaskyPortable , basit bir yapılacaklar listesi uygulamasıdır. Bu belgede, Platformlar Arası Uygulamalar Oluşturma belgesinin yönergelerini izleyerek nasıl tasarlandığı ve oluşturulduğu anlatılmaktadır. Tartışma aşağıdaki alanları kapsar:
Tasarım İşlemi
Kodlamaya başlamadan önce elde etmek istediğiniz şey için bir yol haritası oluşturmanız önerilir. Bu, özellikle birden çok şekilde kullanıma sunulacak işlevler oluşturduğunuz platformlar arası geliştirme için geçerlidir. Ne oluşturduğunuza dair net bir fikirle başlamak, geliştirme döngüsünün ilerleyen bölümlerinde zaman ve efor tasarrufu sağlar.
Gereksinimler
Uygulama tasarlamanın ilk adımı istenen özellikleri belirlemektir. Bunlar üst düzey hedefler veya ayrıntılı kullanım örnekleri olabilir. Tasky'nin basit işlevsel gereksinimleri vardır:
- Görev listesini görüntüleme
- Görev ekleme, düzenleme ve silme
- Görevin durumunu 'bitti' olarak ayarlama
Platforma özgü özellikleri kullanımınızı göz önünde bulundurmalısınız. Tasky, iOS coğrafi sınırlama veya Windows Telefon Canlı Kutucuklardan yararlanabilir mi? İlk sürümde platforma özgü özellikleri kullanmasanız bile, iş ve veri katmanlarınızın bunları karşılayabileceğinden emin olmak için önceden planlamanız gerekir.
Kullanıcı Arabirimi Tasarımı
Hedef platformlarda uygulanabilecek üst düzey bir tasarımla başlayın. Platforma özgü kullanıcı arabirimi kısıtlamalarına dikkat edin. Örneğin, iOS'ta bir TabBarController
beşten fazla düğme görüntüleyebilirken Windows Telefon eşdeğeri en fazla dört düğme görüntüleyebilir.
Seçtiğiniz aracı kullanarak ekran akışını çizin (kağıt çalışır).
Veri Modeli
Hangi verilerin depolanması gerektiğini bilmek, hangi kalıcılık mekanizmasının kullanılacağını belirlemeye yardımcı olur. Kullanılabilir depolama mekanizmaları hakkında bilgi edinmek ve aralarında karar verme konusunda yardımcı olmak için bkz . Platformlar Arası Veri Erişimi . Bu proje için SQLite.NET kullanacağız.
Tasky'nin her 'TaskItem' için üç özellik depolaması gerekir:
- Ad – Dize
- Notlar – Dize
- Bitti – Boole dili
Çekirdek İşlevsellik
Kullanıcı arabiriminin gereksinimleri karşılamak için tüketmesi gereken API'yi göz önünde bulundurun. Yapılacaklar listesi aşağıdaki işlevleri gerektirir:
- Tüm görevleri listeleme – tüm kullanılabilir görevlerin ana ekran listesini görüntülemek için
- Görev satırına dokunulduğunda bir görev alma
- Bir görevi kaydetme – bir görev düzenlendiğinde
- Bir görevi silme – bir görev silindiğinde
- Boş görev oluşturma – yeni görev oluşturulduğunda
Kodu yeniden kullanmak için bu API Taşınabilir Sınıf Kitaplığı'nda bir kez uygulanmalıdır.
Uygulama
Uygulama tasarımı üzerinde anlaşmaya varıldıktan sonra, bunun platformlar arası bir uygulama olarak nasıl uygulanabileceğini göz önünde bulundurun. Bu, uygulamanın mimarisine dönüşür. Platformlar Arası Uygulamalar Oluşturma belgesindeki yönergelerin ardından uygulama kodu aşağıdaki bölümlere ayrılmalıdır:
- Ortak Kod : Görev verilerini depolamak için yeniden kullanılabilir kod içeren ortak bir projedir; verilerin kaydedilmesini ve yüklenmesini yönetmek için model sınıfını ve API'yi kullanıma sunar.
- Platforma Özgü Kod – Ortak kodu 'arka uç' olarak kullanarak her işletim sistemi için yerel bir kullanıcı arabirimi uygulayan platforma özgü projeler.
Bu iki bölüm aşağıdaki bölümlerde açıklanmıştır.
Ortak (PCL) Kod
Tasky Portable, ortak kodu paylaşmak için Taşınabilir Sınıf Kitaplığı stratejisini kullanır. Kod paylaşım seçeneklerinin açıklaması için Bkz. Paylaşım Kodu Seçenekleri belgesi.
Veri erişim katmanı, veritabanı kodu ve sözleşmeler de dahil olmak üzere tüm yaygın kodlar kitaplık projesine yerleştirilir.
PCL projesinin tamamı aşağıda gösterilmiştir. Taşınabilir kitaplıktaki tüm kodlar hedeflenen her platformla uyumludur. Dağıtıldığında, her yerel uygulama bu kitaplığa başvurur.
Aşağıdaki sınıf diyagramında sınıflar katmana göre gruplandırılır. SQLiteConnection
sınıfı, Sqlite-NET paketinden gelen ortak koddur. Sınıfların geri kalanı Tasky için özel kodlardır. TaskItemManager
ve TaskItem
sınıfları, platforma özgü uygulamalara sunulan API'yi temsil edilir.
Katmanları ayırmak için ad alanlarının kullanılması, her katman arasındaki başvuruların yönetilmesine yardımcı olur. Platforma özgü projelerin yalnızca İş Katmanı için bir using
deyimi içermesi gerekir. Veri Erişim Katmanı ve Veri Katmanı, İş Katmanı'nda kullanıma sunulan API tarafından TaskItemManager
kapsüllenmelidir.
Başvurular
Taşınabilir sınıf kitaplıklarının, her biri platform ve çerçeve özellikleri için farklı düzeyde destek düzeyine sahip olan birden çok platformda kullanılabilir olması gerekir. Bu nedenle, paketlerin ve çerçeve kitaplıklarının kullanılabilmesi için sınırlamalar vardır. Örneğin, Xamarin.iOS c# dynamic
anahtar sözcüğünü desteklemez, bu nedenle taşınabilir bir sınıf kitaplığı, bu tür bir kod Android'de çalışsa bile dinamik koda bağlı olan herhangi bir paketi kullanamaz. Mac için Visual Studio uyumsuz paketler ve başvurular eklemenizi engeller, ancak daha sonra sürprizlerden kaçınmak için sınırlamaları göz önünde bulundurmanız gerekir.
Not: Projelerinizin kullanmadığınız çerçeve kitaplıklarına başvurduğunu göreceksiniz. Bu başvurular, Xamarin proje şablonlarının bir parçası olarak eklenir. Uygulamalar derlendiğinde, bağlama işlemi başvurulmamış kodu kaldırır, bu nedenle başvurulsa bile System.Xml
, xml işlevleri kullanmadığımız için son uygulamaya dahil edilmeyecektir.
Veri Katmanı (DL)
Veri Katmanı, verilerin fiziksel depolamasını (bir veritabanına, düz dosyalara veya başka bir mekanizmaya) yerine getiren kodu içerir. Tasky veri katmanı iki bölümden oluşur: SQLite-NET kitaplığı ve bunu bağlamaya eklenen özel kod.
Tasky, Nesne İlişkisel Eşleme (ORM) veritabanı arabirimi sağlayan SQLite-NET kodunu eklemek için Sqlite-net NuGet paketini (Frank Krueger tarafından yayımlandı) kullanır. TaskItemDatabase
sınıfı öğesinden SQLiteConnection
devralır ve SQLite'e veri okumak ve yazmak için gerekli Create, Read, Update, Delete (CRUD) yöntemlerini ekler. Diğer projelerde yeniden kullanılabilecek genel CRUD yöntemlerinin basit bir ortak uygulamasıdır.
TaskItemDatabase
tekildir ve tüm erişimin aynı örnekte gerçekleşmesini sağlar. Birden çok iş parçacığından eşzamanlı erişimi engellemek için bir kilit kullanılır.
Windows Telefon'da SQLite
iOS ve Android işletim sisteminin bir parçası olarak SQLite ile birlikte gönderilse de, Windows Telefon uyumlu bir veritabanı altyapısı içermez. Kodu üç platformda da paylaşmak için SQLite'in Windows phone'a özel bir sürümü gereklidir. Sqlite için Windows Telefon projenizi ayarlama hakkında daha fazla bilgi için bkz. Yerel Veritabanı ile çalışma.
Veri Erişimini Genelleştirmek için Arabirim Kullanma
Veri Katmanı, birincil anahtar gerektiren soyut veri erişim yöntemlerini uygulayabilmesi için bir bağımlılığı BL.Contracts.IBusinessIdentity
alır. Daha sonra arabirimini uygulayan herhangi bir İş Katmanı sınıfı Veri Katmanı'nda kalıcı hale gelebilir.
Arabirimi yalnızca birincil anahtar olarak davranacak bir tamsayı özelliğini belirtir:
public interface IBusinessEntity {
int ID { get; set; }
}
Temel sınıf arabirimini uygular ve SQLite-NET özniteliklerini otomatik olarak artan birincil anahtar olarak işaretlemek için ekler. Bu temel sınıfı uygulayan İş Katmanı'ndaki tüm sınıflar Veri Katmanı'nda kalıcı hale gelebilir:
public abstract class BusinessEntityBase : IBusinessEntity {
public BusinessEntityBase () {}
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
}
Veri Katmanı'nda arabirimini kullanan genel yöntemlere örnek olarak şu GetItem<T>
yöntem gösteriliyor:
public T GetItem<T> (int id) where T : BL.Contracts.IBusinessEntity, new ()
{
lock (locker) {
return Table<T>().FirstOrDefault(x => x.ID == id);
}
}
Eşzamanlı Erişimi engellemek için kilitleme
Veritabanına eşzamanlı erişimi önlemek için sınıfı içinde TaskItemDatabase
bir kilit uygulanır. Bu, farklı iş parçacıklarından eşzamanlı erişimin seri hale getirildiğinden emin olmaktır (aksi takdirde bir kullanıcı arabirimi bileşeni arka plan iş parçacığı veritabanını güncelleştirirken veritabanını okumaya çalışabilir). Kilidin nasıl uygulandığına ilişkin bir örnek burada gösterilmiştir:
static object locker = new object ();
public IEnumerable<T> GetItems<T> () where T : BL.Contracts.IBusinessEntity, new ()
{
lock (locker) {
return (from i in Table<T> () select i).ToList ();
}
}
public T GetItem<T> (int id) where T : BL.Contracts.IBusinessEntity, new ()
{
lock (locker) {
return Table<T>().FirstOrDefault(x => x.ID == id);
}
}
Veri Katmanı kodunun çoğu diğer projelerde yeniden kullanılabilir. Katmandaki uygulamaya özgü tek kod oluşturucudaki TaskItemDatabase
çağrıdırCreateTable<TaskItem>
.
Veri Erişim Katmanı (DAL)
TaskItemRepository
sınıfı, veri depolama mekanizmasını nesnelerin oluşturulmasına, silinmesine, alınmasına ve güncelleştirilmesini sağlayan TaskItem
kesin olarak belirlenmiş bir API ile kapsüller.
Koşullu Derleme Kullanma
sınıfı, dosya konumunu ayarlamak için koşullu derleme kullanır. Bu, Platform Ayrıştırma'nın uygulanmasına bir örnektir. Yolu döndüren özellik, her platformda farklı koda derler. Kod ve platforma özgü derleyici yönergeleri burada gösterilmiştir:
public static string DatabaseFilePath {
get {
var sqliteFilename = "TaskDB.db3";
#if SILVERLIGHT
// Windows Phone expects a local path, not absolute
var path = sqliteFilename;
#else
#if __ANDROID__
// Just use whatever directory SpecialFolder.Personal returns
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); ;
#else
// we need to put in /Library/ on iOS5.1+ to meet Apple's iCloud terms
// (they don't want non-user-generated data in Documents)
string documentsPath = Environment.GetFolderPath (Environment.SpecialFolder.Personal); // Documents folder
string libraryPath = Path.Combine (documentsPath, "..", "Library"); // Library folder
#endif
var path = Path.Combine (libraryPath, sqliteFilename);
#endif
return path;
}
}
Platforma bağlı olarak çıkış, iOS için "<uygulama yolu>/Library/TaskDB.db3", Android için "<uygulama yolu>/Belgeler/TaskDB.db3" veya Yalnızca Windows Telefon için "TaskDB.db3" olacaktır.
İş Katmanı (BL)
İş Katmanı, model sınıflarını ve bunları yönetmek için bir Cephe uygular.
Tasky'de Model sınıfıdır TaskItem
ve TaskItemManager
yönetimi için bir API sağlamak üzere Cephe desenini TaskItems
uygular.
Cephe
TaskItemManager
DAL.TaskItemRepository
Uygulama ve UI Katmanları tarafından başvurulacak Get, Save ve Delete yöntemlerini sağlamak için öğesini sarmalar.
gerekirse iş kuralları ve mantığı buraya yerleştirilir; örneğin, bir nesne kaydedilmeden önce karşılanması gereken doğrulama kuralları.
Platforma Özgü Kod için API
Ortak kod yazıldıktan sonra, kullanıcı arabirimi tarafından kullanıma sunulan verileri toplamak ve görüntülemek için oluşturulmalıdır. sınıfı, TaskItemManager
uygulama kodunun erişmesi için basit bir API sağlamak üzere Cephe düzenini uygular.
Platforma özgü her projede yazılan kod genellikle bu cihazın yerel SDK'sıyla sıkı bir şekilde birleştirilir ve yalnızca tarafından tanımlanan API'yi kullanarak ortak koda erişin TaskItemManager
. Bu, TaskItem
gibi kullanıma sunulan yöntemleri ve iş sınıflarını içerir.
Görüntüler platformlar arasında paylaşılmaz, ancak her projeye bağımsız olarak eklenir. Her platform farklı dosya adlarını, dizinleri ve çözümleri kullanarak görüntüleri farklı işlediğinden bu önemlidir.
Kalan bölümlerde Tasky kullanıcı arabiriminin platforma özgü uygulama ayrıntıları ele alınıyor.
iOS Uygulaması
Verileri depolamak ve almak için ortak PCL projesini kullanarak iOS Tasky uygulamasını uygulamak için gereken yalnızca birkaç sınıf vardır. iOS Xamarin.iOS projesinin tamamı aşağıda gösterilmiştir:
Sınıflar bu diyagramda gösterilir ve katmanlar halinde gruplandırılır.
Başvurular
iOS uygulaması platforma özgü SDK kitaplıklarına başvurur; örneğin. Xamarin.iOS ve MonoTouch.Dialog-1.
Ayrıca PCL projesine başvurması TaskyPortableLibrary
gerekir.
Başvuru listesi burada gösterilmiştir:
Uygulama Katmanı ve Kullanıcı Arabirimi Katmanı bu başvurular kullanılarak bu projede uygulanır.
Uygulama Katmanı (AL)
Uygulama Katmanı, PCL tarafından kullanıcı arabirimine sunulan nesneleri 'bağlamak' için gereken platforma özgü sınıflar içerir. iOS'a özgü uygulamanın görevleri görüntülemeye yardımcı olacak iki sınıfı vardır:
- EditingSource – Bu sınıf, görev listelerini kullanıcı arabirimine bağlamak için kullanılır.
MonoTouch.Dialog
Görev listesi için kullanıldığından, içinde çekme-silme işlevini etkinleştirmek için bu yardımcıyıUITableView
uygulamamız gerekir. Çekme-silme işlemi iOS'ta yaygındır, ancak Android veya Windows Telefon değildir, bu nedenle bunu uygulayan tek proje iOS'a özgü projedir. - TaskDialog : Bu sınıf, kullanıcı arabirimine tek bir görev bağlamak için kullanılır. Giriş ekranının
MonoTouch.Dialog
doğru biçimlendirilmesine izin vermek için nesneyi doğru öznitelikleri içeren bir sınıfla 'sarmalamak'TaskItem
için Düşünceler ion API'sini kullanır.
sınıfı, bir sınıfın TaskDialog
özelliklerine göre ekran oluşturmak için öznitelikleri kullanır MonoTouch.Dialog
. sınıfı şöyle görünür:
public class TaskDialog {
public TaskDialog (TaskItem task)
{
Name = task.Name;
Notes = task.Notes;
Done = task.Done;
}
[Entry("task name")]
public string Name { get; set; }
[Entry("other task info")]
public string Notes { get; set; }
[Entry("Done")]
public bool Done { get; set; }
[Section ("")]
[OnTap ("SaveTask")] // method in HomeScreen
[Alignment (UITextAlignment.Center)]
public string Save;
[Section ("")]
[OnTap ("DeleteTask")] // method in HomeScreen
[Alignment (UITextAlignment.Center)]
public string Delete;
}
OnTap
Özniteliklerin bir yöntem adı gerektirdiğine dikkat edin; bu yöntemlerin oluşturulduğu sınıfta MonoTouch.Dialog.BindingContext
bulunması gerekir (bu örnekte, HomeScreen
sonraki bölümde ele alınan sınıf).
Kullanıcı Arabirimi Katmanı (UI)
Kullanıcı Arabirimi Katmanı aşağıdaki sınıflardan oluşur:
- AppDelegate : Uygulamada kullanılan yazı tiplerini ve renkleri stilize etmek için Görünüm API'sine yapılan çağrıları içerir. Tasky basit bir uygulama olduğundan içinde
FinishedLaunching
çalışan başka başlatma görevi yoktur. - Ekranlar – her bir ekranı ve davranışını tanımlayan alt sınıfları
UIViewController
. Ekranlar, kullanıcı arabirimini Uygulama Katmanı sınıfları ve ortak API (TaskItemManager
) ile birleştirir. Bu örnekte ekranlar kodda oluşturulmuştur, ancak Xcode'un Arabirim Oluşturucusu veya görsel taslak tasarımcısı kullanılarak tasarlanmış olabilir. - Görüntüler – Görsel öğeler her uygulamanın önemli bir parçasıdır. Tasky, iOS için normal ve Retina çözünürlükte sağlanması gereken giriş ekranı ve simge görüntülerine sahiptir.
Giriş Ekranı
Giriş Ekranı, SQLite veritabanındaki görevlerin listesini görüntüleyen bir ekrandır MonoTouch.Dialog
. öğesinden DialogViewController
devralır ve görüntü için bir nesne koleksiyonu TaskItem
içerecek şekilde ayarlamak Root
üzere kodu uygular.
Görev listesini görüntüleme ve görev listesiyle etkileşim kurma ile ilgili iki ana yöntem şunlardır:
- PopulateTable – Görüntülenecek nesne koleksiyonunu almak için İş Katmanı'nın
TaskManager.GetTasks
TaskItem
yöntemini kullanır. - Seçili – Bir satıra dokunulduğunda, görevi yeni bir ekranda görüntüler.
Görev Ayrıntıları Ekranı
Görev Ayrıntıları, görevlerin düzenlenmesine veya silinmesine izin veren bir giriş ekranıdır.
Tasky ekranı görüntülemek için 'Düşünceler ion API'sini kullanırMonoTouch.Dialog
, bu nedenle uygulama yokturUIViewController
. Bunun yerine, HomeScreen
sınıf örneği oluşturur ve Uygulama Katmanı'ndan sınıfını TaskDialog
kullanarak bir DialogViewController
görüntüler.
Bu ekran görüntüsü, Ad ve Notlar Entry
alanlarında filigran metnini ayarlama özniteliğini gösteren boş bir ekran gösterir:
Burada oluşturulduğundan, Görev Ayrıntıları ekranının işlevselliği (görevi kaydetme veya silme gibi) sınıfında MonoTouch.Dialog.BindingContext
uygulanmalıdırHomeScreen
. Aşağıdaki HomeScreen
yöntemler Görev Ayrıntıları ekranını destekler:
- ShowTaskDetails : Bir ekranı işlemek için bir
MonoTouch.Dialog.BindingContext
oluşturur. Sınıfından özellik adlarını ve türleriniTaskDialog
almak için yansıma kullanarak giriş ekranını oluşturur. Giriş kutuları için filigran metni gibi ek bilgiler, özelliklerdeki özniteliklerle uygulanır. - SaveTask : Bu yönteme sınıfında bir
OnTap
öznitelik aracılığıyla başvurulurTaskDialog
. Kaydet tuşuna basıldığında çağrılır ve kullanarakTaskItemManager
değişiklikleri kaydetmeden önce kullanıcı tarafından girilen verileri almak için öğesiniMonoTouch.Dialog.BindingContext
kullanır. - DeleteTask : Bu yönteme sınıfında bir
OnTap
öznitelik aracılığıyla başvurulurTaskDialog
. Birincil anahtarı (ID özelliği) kullanarak verileri silmek için kullanırTaskItemManager
.
Android Uygulaması
Xamarin.Android projesinin tamamı aşağıda resmedilir:
Sınıf diyagramı, sınıflar katmana göre gruplandırılır:
Başvurular
Android uygulama projesi, Android SDK'dan sınıflara erişmek için platforma özgü Xamarin.Android derlemesine başvurmalıdır.
Ayrıca PCL projesine de başvurmalıdır (örn. TaskyPortableLibrary) öğesini seçip ortak veri ve iş katmanı koduna erişin.
Uygulama Katmanı (AL)
Daha önce incelediğimiz iOS sürümüne benzer şekilde, Android sürümündeki Uygulama Katmanı, Çekirdek tarafından kullanıcı arabirimine sunulan nesneleri 'bağlamak' için gereken platforma özgü sınıflar içerir.
TaskListAdapter – Bir Nesne Listesi<T'sini> görüntülemek için içinde özel nesneleri ListView
görüntülemek için bir bağdaştırıcı uygulamamız gerekir. Bağdaştırıcı, listedeki her öğe için hangi düzenin kullanılacağını denetler; bu durumda kod, Android yerleşik düzenini SimpleListItemChecked
kullanır.
Kullanıcı Arabirimi (UI)
Android uygulamasının Kullanıcı Arabirimi Katmanı, kod ve XML işaretlemesinin bir bileşimidir.
- Kaynaklar/Düzen – ekran düzenleri ve AXML dosyaları olarak uygulanan satır hücresi tasarımı. AXML, Android için Xamarin kullanıcı arabirimi Tasarım Aracı kullanılarak elle yazılabilir veya görsel olarak yerleştirilebilir.
- Kaynaklar/Çizilebilir – resimler (simgeler) ve özel düğme.
- Ekranlar – Her ekranı ve davranışını tanımlayan etkinlik alt sınıfları. Kullanıcı arabirimini Uygulama Katmanı sınıfları ve ortak API (
TaskItemManager
) ile birleştirir.
Giriş Ekranı
Giriş Ekranı bir Etkinlik alt sınıfından HomeScreen
HomeScreen.axml
ve düzeni tanımlayan dosyadan (düğmenin ve görev listesinin konumu) oluşur. Ekran şöyle görünür:
Giriş Ekranı kodu, düğmeye ve listedeki öğelere tıklamanın yanı sıra yöntemdeki OnResume
listeyi doldurmaya yönelik işleyicileri tanımlar (böylece Görev Ayrıntıları Ekranında yapılan değişiklikleri yansıtır). Veriler İş Katmanı'nın ve TaskListAdapter
Uygulama Katmanı'ndan TaskItemManager
kullanılarak yüklenir.
Görev Ayrıntıları Ekranı
Görev Ayrıntıları Ekranı ayrıca bir Activity
alt sınıf ve bir AXML düzen dosyasından oluşur. Düzen, giriş denetimlerinin konumunu belirler ve C# sınıfı nesneleri yükleme ve kaydetme TaskItem
davranışını tanımlar.
PCL kitaplığına yapılan tüm başvurular sınıfı üzerinden TaskItemManager
yapılır.
Windows Telefon Uygulaması
Windows Telefon projesinin tamamı:
Aşağıdaki diyagramda katmanlar halinde gruplandırılmış sınıflar gösterilir:
Başvurular
Platforma özgü proje, geçerli bir Windows Telefon uygulaması oluşturmak için gerekli platforma özgü kitaplıklara (ve gibi Microsoft.Phone
System.Windows
) başvurmalıdır.
Ayrıca sınıfını ve veritabanını kullanmak için PCL projesine (örn. TaskyPortableLibrary
) başvurması TaskItem
gerekir.
Uygulama Katmanı (AL)
iOS ve Android sürümlerinde olduğu gibi uygulama katmanı da kullanıcı arabirimine veri bağlamaya yardımcı olan görsel olmayan öğelerden oluşur.
Görünüm Modelleri
ViewModel'ler VERILERI PCL ' den ( TaskItemManager
) sarmalar ve Silverlight/XAML veri bağlaması tarafından kullanılabilecek şekilde sunar. Bu, platforma özgü bir davranış örneğidir (Platformlar Arası Uygulamalar belgesinde açıklandığı gibi).
Kullanıcı Arabirimi (UI)
XAML, işaretlemede bildirilebilen ve nesneleri görüntülemek için gereken kod miktarını azaltabilen benzersiz bir veri bağlama özelliğine sahiptir:
- Sayfalar – XAML dosyaları ve bunların codebehind'i kullanıcı arabirimini tanımlar ve verileri görüntülemek ve toplamak için ViewModel'lere ve PCL projesine başvurur.
- Görüntüler – Giriş ekranı, arka plan ve simge görüntüleri, kullanıcı arabiriminin önemli bir parçasıdır.
Anasayfa
MainPage sınıfı, XAML'nin veri bağlama özelliklerini kullanarak verileri görüntülemek için öğesini TaskListViewModel
kullanır. Sayfa DataContext
, zaman uyumsuz olarak doldurulan görünüm modeline ayarlanır. {Binding}
XAML'deki söz dizimi, verilerin nasıl görüntüleneceğini belirler.
TaskDetailsPage
Her görev, öğesini TaskDetailsPage.xaml dosyasında tanımlanan XAML'ye bağlayarak TaskViewModel
görüntülenir. Görev verileri İş Katmanı'ndaki aracılığıyla TaskItemManager
alınır.
Sonuçlar
Sonuçta elde edilen uygulamalar her platformda şöyle görünür:
iOS
Uygulama, gezinti çubuğuna konumlandırılan 'ekle' düğmesi ve yerleşik artı (+) simgesi gibi iOS standart kullanıcı arabirimi tasarımını kullanır. Ayrıca varsayılan UINavigationController
'geri' düğme davranışını kullanır ve tabloda 'swipe-to-delete' özelliğini destekler.
Android
Android uygulaması, 'onay işareti' görüntülenmesini gerektiren satırlar için yerleşik düzen de dahil olmak üzere yerleşik denetimleri kullanır. Ekran geri düğmesine ek olarak donanım/sistem geri davranışı desteklenir.
Windows Phone
Windows Telefon uygulaması standart düzeni kullanır ve üstteki gezinti çubuğu yerine ekranın alt kısmındaki uygulama çubuğunu doldurarak.
Özet
Bu belge, iOS, Android ve Windows Telefon olmak üzere üç mobil platformda kod yeniden kullanımını kolaylaştırmak için katmanlı uygulama tasarımı ilkelerinin basit bir uygulamaya nasıl uygulandığına ilişkin ayrıntılı bir açıklama sağlamıştır.
Uygulama katmanlarını tasarlamak için kullanılan işlemi açıklamıştır ve her katmanda hangi kod ve işlevselliğin uygulandığını anlatmıştır.