Bagikan melalui


Studi Kasus Aplikasi Lintas Platform: Tugas

TaskyPortable adalah aplikasi daftar tugas yang mudah dilakukan. Dokumen ini membahas bagaimana itu dirancang dan dibangun, mengikuti panduan dokumen Membangun Aplikasi Lintas Platform. Diskusi mencakup area berikut:

Proses Desain

Dianjurkan untuk membuat peta jalan untuk apa yang ingin Anda capai sebelum Anda mulai mengkoding. Ini terutama berlaku untuk pengembangan lintas platform, di mana Anda membangun fungsionalitas yang akan diekspos dengan berbagai cara. Dimulai dengan gagasan yang jelas tentang apa yang Anda bangun menghemat waktu dan upaya nanti dalam siklus pengembangan.

Persyaratan

Langkah pertama dalam merancang aplikasi adalah mengidentifikasi fitur yang diinginkan. Ini bisa menjadi tujuan tingkat tinggi atau kasus penggunaan terperinci. Tasky memiliki persyaratan fungsi yang mudah:

  • Menampilkan daftar tugas
  • Menambahkan, mengedit, dan menghapus tugas
  • Atur status tugas ke 'selesai'

Anda harus mempertimbangkan penggunaan fitur khusus platform. Dapatkah Tasky memanfaatkan geofencing iOS atau Windows Telepon Live Tiles? Bahkan jika Anda tidak menggunakan fitur khusus platform dalam versi pertama, Anda harus merencanakan ke depan untuk memastikan bisnis & lapisan data Anda dapat mengakomodasinya.

Desain Antarmuka Pengguna

Mulailah dengan desain tingkat tinggi yang dapat diimplementasikan di seluruh platform target. Berhati-hatilah untuk mencatat batasan UI platform-specfic. Misalnya, TabBarController di iOS dapat menampilkan lebih dari lima tombol, sedangkan Windows Telepon setara dapat menampilkan hingga empat tombol. Gambar aliran layar menggunakan alat pilihan Anda (kertas berfungsi).

Draw the screen-flow using the tool of your choice paper works

Model data

Mengetahui data apa yang perlu disimpan akan membantu menentukan mekanisme persistensi mana yang akan digunakan. Lihat Akses Data Lintas Platform untuk informasi tentang mekanisme penyimpanan yang tersedia dan membantu memutuskan di antara mereka. Untuk proyek ini, kita akan menggunakan SQLite.NET.

Tasky perlu menyimpan tiga properti untuk setiap 'TaskItem':

  • Nama – String
  • Catatan – String
  • Selesai – Boolean

Fungsionalitas Inti

Pertimbangkan API yang perlu dikonsumsi antarmuka pengguna untuk memenuhi persyaratan. Daftar tugas memerlukan fungsi berikut:

  • Mencantumkan semua tugas – untuk menampilkan daftar layar utama dari semua tugas yang tersedia
  • Mendapatkan satu tugas – saat baris tugas disentuh
  • Simpan satu tugas – saat tugas diedit
  • Menghapus satu tugas – saat tugas dihapus
  • Membuat tugas kosong – saat tugas baru dibuat

Untuk mencapai penggunaan kembali kode, API ini harus diimplementasikan sekali di Pustaka Kelas Portabel.

implementasi

Setelah desain aplikasi disepakati, pertimbangkan bagaimana hal itu mungkin diimplementasikan sebagai aplikasi lintas platform. Ini akan menjadi arsitektur aplikasi. Mengikuti panduan dalam dokumen Membangun Aplikasi Lintas Platform, kode aplikasi harus dipecah menjadi bagian-bagian berikut:

  • Kode Umum – proyek umum yang berisi kode yang dapat digunakan kembali untuk menyimpan data tugas; mengekspos kelas Model dan API untuk mengelola penyimpanan dan pemuatan data.
  • Kode khusus platform – proyek khusus platform yang mengimplementasikan UI asli untuk setiap sistem operasi, menggunakan kode umum sebagai 'back end'.

Platform-specific projects implement a native UI for each operating system, utilizing the common code as the back end

Kedua bagian ini dijelaskan di bagian berikut.

Kode Umum (PCL)

Tasky Portable menggunakan strategi Pustaka Kelas Portabel untuk berbagi kode umum. Lihat dokumen Opsi Kode Berbagi untuk deskripsi opsi berbagi kode.

Semua kode umum, termasuk lapisan akses data, kode database, dan kontrak, ditempatkan dalam proyek pustaka.

Proyek PCL lengkap diilustrasikan di bawah ini. Semua kode di pustaka portabel kompatibel dengan setiap platform yang ditargetkan. Saat disebarkan, setiap aplikasi asli akan mereferensikan pustaka tersebut.

When deployed, each native app will reference that library

Diagram kelas di bawah ini menunjukkan kelas yang dikelompokkan menurut lapisan. Kelas SQLiteConnection ini adalah kode boilerplate dari paket Sqlite-NET. Kelas lainnya adalah kode kustom untuk Tasky. Kelas TaskItemManager dan TaskItem mewakili API yang diekspos ke aplikasi khusus platform.

The TaskItemManager and TaskItem classes represent the API that is exposed to the platform-specific applications

Menggunakan namespace untuk memisahkan lapisan membantu mengelola referensi di antara setiap lapisan. Proyek khusus platform hanya perlu menyertakan using pernyataan untuk Lapisan Bisnis. Lapisan Akses Data dan Lapisan Data harus dienkapsulasi oleh API yang diekspos oleh TaskItemManager di Lapisan Bisnis.

Referensi

Pustaka kelas portabel harus dapat digunakan di beberapa platform, masing-masing dengan berbagai tingkat dukungan untuk platform dan fitur kerangka kerja. Karena itu, ada batasan paket dan pustaka kerangka kerja mana yang dapat digunakan. Misalnya, Xamarin.iOS tidak mendukung kata kunci c# dynamic , sehingga pustaka kelas portabel tidak dapat menggunakan paket apa pun yang bergantung pada kode dinamis, meskipun kode tersebut akan berfungsi di Android. Visual Studio untuk Mac akan mencegah Anda menambahkan paket dan referensi yang tidak kompatibel, tetapi Anda harus mengingat batasan untuk menghindari kejutan di kemudian hari.

Catatan: Anda akan melihat bahwa pustaka kerangka kerja referensi proyek yang belum Anda gunakan. Referensi ini disertakan sebagai bagian dari templat proyek Xamarin. Saat aplikasi dikompilasi, proses penautan akan menghapus kode yang tidak direferensikan, jadi meskipun System.Xml telah direferensikan, aplikasi tersebut tidak akan disertakan dalam aplikasi akhir karena kami tidak menggunakan fungsi Xml apa pun.

Lapisan Data (DL)

Lapisan Data berisi kode yang melakukan penyimpanan fisik data – baik ke database, file datar, atau mekanisme lainnya. Lapisan data Tasky terdiri dari dua bagian: pustaka SQLite-NET dan kode kustom yang ditambahkan untuk menyambungkannya.

Tasky mengandalkan paket NuGet Sqlite-net (diterbitkan oleh Frank Krueger) untuk menyematkan kode SQLite-NET yang menyediakan antarmuka database Object-Relational Mapping (ORM). Kelas TaskItemDatabase mewarisi dari SQLiteConnection dan menambahkan metode Buat, Baca, Perbarui, Hapus (CRUD) yang diperlukan untuk membaca dan menulis data ke SQLite. Ini adalah implementasi boilerplate sederhana dari metode CRUD generik yang dapat digunakan kembali dalam proyek lain.

TaskItemDatabase adalah singleton, memastikan bahwa semua akses terjadi terhadap instans yang sama. Kunci digunakan untuk mencegah akses bersamaan dari beberapa utas.

SQLite di Windows Telepon

Meskipun iOS dan Android keduanya dikirim dengan SQLite sebagai bagian dari sistem operasi, Windows Telepon tidak menyertakan mesin database yang kompatibel. Untuk berbagi kode di ketiga platform, SQLite versi asli ponsel Windows diperlukan. Lihat Bekerja dengan Database Lokal untuk informasi selengkapnya tentang menyiapkan proyek Windows Telepon anda untuk Sqlite.

Menggunakan Antarmuka untuk Menggeneralisasi Akses Data

Lapisan Data mengambil dependensi BL.Contracts.IBusinessIdentity sehingga dapat menerapkan metode akses data abstrak yang memerlukan kunci primer. Setiap kelas Lapisan Bisnis yang mengimplementasikan antarmuka kemudian dapat dipertahankan di Lapisan Data.

Antarmuka hanya menentukan properti bilangan bulat untuk bertindak sebagai kunci utama:

public interface IBusinessEntity {
    int ID { get; set; }
}

Kelas dasar mengimplementasikan antarmuka dan menambahkan atribut SQLite-NET untuk menandainya sebagai kunci primer yang bertambah secara otomatis. Kelas apa pun di Lapisan Bisnis yang mengimplementasikan kelas dasar ini kemudian dapat dipertahankan di Lapisan Data:

public abstract class BusinessEntityBase : IBusinessEntity {
    public BusinessEntityBase () {}
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }
}

Contoh metode generik di Lapisan Data yang menggunakan antarmuka adalah metode ini GetItem<T> :

public T GetItem<T> (int id) where T : BL.Contracts.IBusinessEntity, new ()
{
    lock (locker) {
        return Table<T>().FirstOrDefault(x => x.ID == id);
    }
}

Penguncian untuk mencegah Akses Bersamaan

Kunci diimplementasikan dalam TaskItemDatabase kelas untuk mencegah akses bersamaan ke database. Ini untuk memastikan akses bersamaan dari utas yang berbeda diserialisasikan (jika tidak, komponen UI mungkin mencoba membaca database pada saat yang sama utas latar belakang memperbaruinya). Contoh bagaimana kunci diimplementasikan ditunjukkan di sini:

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);
    }
}

Sebagian besar kode Lapisan Data dapat digunakan kembali di proyek lain. Satu-satunya kode khusus aplikasi dalam lapisan adalah CreateTable<TaskItem> panggilan di TaskItemDatabase konstruktor.

Lapisan Akses Data (DAL)

Kelas ini TaskItemRepository merangkum mekanisme penyimpanan data dengan API dengan jenis kuat yang memungkinkan TaskItem objek dibuat, dihapus, diambil, dan diperbarui.

Menggunakan Kompilasi Bersyarah

Kelas menggunakan kompilasi kondisional untuk mengatur lokasi file - ini adalah contoh penerapan Platform Divergence. Properti yang mengembalikan jalur dikompilasi ke kode yang berbeda di setiap platform. Direktif kompilator khusus platform dan kode ditunjukkan di sini:

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;
    }
}

Bergantung pada platform, outputnya adalah "<app path>/Library/TaskDB.db3" untuk iOS, "<app path>/Documents/TaskDB.db3" untuk Android atau hanya "TaskDB.db3" untuk Windows Telepon.

Lapisan Bisnis (BL)

Lapisan Bisnis mengimplementasikan kelas Model dan Fasad untuk mengelolanya. Dalam Tasky, Model adalah TaskItem kelas dan TaskItemManager mengimplementasikan pola Fasad untuk menyediakan API untuk mengelola TaskItems.

Fasad

TaskItemManager membungkus DAL.TaskItemRepository untuk menyediakan metode Dapatkan, Simpan, dan Hapus yang akan dirujuk oleh Lapisan Aplikasi dan UI.

Aturan dan logika bisnis akan ditempatkan di sini jika diperlukan - misalnya aturan validasi apa pun yang harus dipenuhi sebelum objek disimpan.

API untuk Kode Khusus Platform

Setelah kode umum ditulis, antarmuka pengguna harus dibangun untuk mengumpulkan dan menampilkan data yang diekspos olehnya. Kelas mengimplementasikan TaskItemManager pola Fasad untuk menyediakan API sederhana agar kode aplikasi dapat diakses.

Kode yang ditulis dalam setiap proyek khusus platform umumnya akan digabungkan erat dengan SDK asli perangkat tersebut, dan hanya mengakses kode umum menggunakan API yang ditentukan oleh TaskItemManager. Ini termasuk metode dan kelas bisnis yang dieksposnya, seperti TaskItem.

Gambar tidak dibagikan di seluruh platform tetapi ditambahkan secara independen ke setiap proyek. Ini penting karena setiap platform menangani gambar secara berbeda, menggunakan nama file, direktori, dan resolusi yang berbeda.

Bagian yang tersisa membahas detail implementasi khusus platform dari Antarmuka Pengguna Tugas.

Aplikasi iOS

Hanya ada beberapa kelas yang diperlukan untuk menerapkan aplikasi iOS Tasky menggunakan proyek PCL umum untuk menyimpan dan mengambil data. Proyek iOS Xamarin.iOS lengkap ditunjukkan di bawah ini:

iOS project is shown here

Kelas ditampilkan dalam diagram ini, dikelompokkan ke dalam lapisan.

The classes are shown in this diagram, grouped into layers

Referensi

Aplikasi iOS mereferensikan pustaka SDK khusus platform – misalnya. Xamarin.iOS dan MonoTouch.Dialog-1.

Ini juga harus mereferensikan TaskyPortableLibrary proyek PCL. Daftar referensi diperlihatkan di sini:

The references list is shown here

Lapisan Aplikasi dan Lapisan Antarmuka Pengguna diimplementasikan dalam proyek ini menggunakan referensi ini.

Lapisan Aplikasi (AL)

Lapisan Aplikasi berisi kelas khusus platform yang diperlukan untuk 'mengikat' objek yang diekspos oleh PCL ke UI. Aplikasi khusus iOS memiliki dua kelas untuk membantu menampilkan tugas:

  • EditingSource – Kelas ini digunakan untuk mengikat daftar tugas ke antarmuka pengguna. Karena MonoTouch.Dialog digunakan untuk daftar Tugas, kita perlu mengimplementasikan pembantu UITableView ini untuk mengaktifkan fungsionalitas usap-ke-hapus di . Swipe-to-delete umum di iOS, tetapi bukan Android atau Windows Telepon, jadi proyek khusus iOS adalah satu-satunya yang mengimplementasikannya.
  • TaskDialog – Kelas ini digunakan untuk mengikat satu tugas ke UI. Ini menggunakan API Refleksi untuk 'membungkus MonoTouch.Dialog ' TaskItem objek dengan kelas yang berisi atribut yang benar untuk memungkinkan layar input diformat dengan benar.

Kelas TaskDialog menggunakan MonoTouch.Dialog atribut untuk membuat layar berdasarkan properti kelas. Kelasnya terlihat seperti ini:

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 Perhatikan bahwa atribut memerlukan nama metode - metode ini harus ada di kelas tempat MonoTouch.Dialog.BindingContext dibuat (dalam hal ini, kelas yang HomeScreen dibahas di bagian berikutnya).

Lapisan Antarmuka Pengguna (UI)

Lapisan Antarmuka Pengguna terdiri dari kelas-kelas berikut:

  1. AppDelegate – Berisi panggilan ke Appearance API untuk menata font dan warna yang digunakan dalam aplikasi. Tasky adalah aplikasi sederhana sehingga tidak ada tugas inisialisasi lain yang berjalan di FinishedLaunching .
  2. Layar – subkelas UIViewController yang menentukan setiap layar dan perilakunya. Layar mengikat UI dengan kelas Lapisan Aplikasi dan API umum ( TaskItemManager ). Dalam contoh ini layar dibuat dalam kode, tetapi dapat dirancang menggunakan Penyusun Antarmuka Xcode atau perancang papan cerita.
  3. Gambar – Elemen visual adalah bagian penting dari setiap aplikasi. Tasky memiliki gambar layar splash dan ikon, yang untuk iOS harus disediakan dalam resolusi reguler dan Retina.

Tampilan beranda

Layar Beranda adalah MonoTouch.Dialog layar yang menampilkan daftar tugas dari database SQLite. Ini mewarisi dari DialogViewController dan mengimplementasikan kode untuk mengatur Root ke berisi kumpulan TaskItem objek untuk ditampilkan.

It inherits from DialogViewController and implements code to set the Root to contain a collection of TaskItem objects for display

Dua metode utama yang terkait dengan menampilkan dan berinteraksi dengan daftar tugas adalah:

  1. PopulateTable – Menggunakan metode Lapisan TaskManager.GetTasks Bisnis untuk mengambil kumpulan TaskItem objek yang akan ditampilkan.
  2. Dipilih – Saat baris disentuh, menampilkan tugas di layar baru.

Layar Detail Tugas

Detail Tugas adalah layar input yang memungkinkan tugas diedit atau dihapus.

Tasky menggunakan MonoTouch.DialogAPI Refleksi untuk menampilkan layar, sehingga tidak UIViewController ada implementasi. Sebagai gantinya HomeScreen , kelas membuat instans DialogViewController dan menampilkan menggunakan TaskDialog kelas dari Lapisan Aplikasi.

Cuplikan layar ini memperlihatkan layar kosong yang menunjukkan atribut yang mengatur Entry teks marka air di bidang Nama dan Catatan :

This screenshot shows an empty screen that demonstrates the Entry attribute setting the watermark text in the Name and Notes fields

Fungsionalitas layar Detail Tugas (seperti menyimpan atau menghapus tugas) harus diimplementasikan di HomeScreen kelas, karena di sinilah MonoTouch.Dialog.BindingContext dibuat. Metode berikut HomeScreen mendukung layar Detail Tugas:

  1. ShowTaskDetails – Membuat MonoTouch.Dialog.BindingContext untuk merender layar. Ini membuat layar input menggunakan pantulan untuk mengambil nama dan jenis properti dari TaskDialog kelas. Informasi tambahan, seperti teks marka air untuk kotak input, diimplementasikan dengan atribut pada properti.
  2. SaveTask – Metode ini dirujuk di TaskDialog kelas melalui OnTap atribut . Ini dipanggil ketika Simpan ditekan, dan menggunakan untuk mengambil data yang MonoTouch.Dialog.BindingContext dimasukkan pengguna sebelum menyimpan perubahan menggunakan TaskItemManager .
  3. DeleteTask – Metode ini dirujuk di TaskDialog kelas melalui OnTap atribut . Ini menggunakan TaskItemManager untuk menghapus data menggunakan kunci primer (properti ID).

Aplikasi Android

Proyek Xamarin.Android lengkap digambilkan di bawah ini:

Android project is pictured here

Diagram kelas, dengan kelas yang dikelompokkan menurut lapisan:

The class diagram, with classes grouped by layer

Referensi

Proyek aplikasi Android harus mereferensikan perakitan Xamarin.Android khusus platform untuk mengakses kelas dari Android SDK.

Ini juga harus mereferensikan proyek PCL (misalnya. TaskyPortableLibrary) untuk mengakses data umum dan kode lapisan bisnis.

TaskyPortableLibrary to access the common data and business layer code

Lapisan Aplikasi (AL)

Mirip dengan versi iOS yang kita lihat sebelumnya, Lapisan Aplikasi dalam versi Android berisi kelas khusus platform yang diperlukan untuk 'mengikat' objek yang diekspos oleh Core ke UI.

TaskListAdapter – untuk menampilkan Daftar<T> objek yang perlu kita terapkan adaptor untuk menampilkan objek kustom dalam ListView. Adaptor mengontrol tata letak mana yang digunakan untuk setiap item dalam daftar - dalam hal ini kode menggunakan tata letak SimpleListItemCheckedbawaan Android .

Antarmuka Pengguna (UI)

Lapisan Antarmuka Pengguna aplikasi Android adalah kombinasi kode dan markup XML.

  • Sumber Daya/Tata Letak – tata letak layar dan desain sel baris yang diimplementasikan sebagai file AXML. AXML dapat ditulis dengan tangan, atau ditata secara visual menggunakan Xamarin UI Designer untuk Android.
  • Sumber Daya/Dapat Digambar – gambar (ikon) dan tombol kustom.
  • Layar – Subkelas aktivitas yang menentukan setiap layar dan perilakunya. Mengikat bersama UI dengan kelas Lapisan Aplikasi dan API umum (TaskItemManager).

Tampilan beranda

Layar Beranda terdiri dari subkelas HomeScreen Aktivitas dan HomeScreen.axml file yang menentukan tata letak (posisi tombol dan daftar tugas). Layar terlihat seperti ini:

The screen looks like this

Kode Layar Beranda mendefinisikan handler untuk mengklik tombol dan mengklik item dalam daftar, serta mengisi daftar dalam OnResume metode (sehingga mencerminkan perubahan yang dibuat di Layar Detail Tugas). Data dimuat menggunakan Lapisan TaskItemManager Bisnis dan TaskListAdapter dari Lapisan Aplikasi.

Layar Detail Tugas

Layar Detail Tugas juga terdiri dari Activity subkelas dan file tata letak AXML. Tata letak menentukan lokasi kontrol input dan kelas C# menentukan perilaku untuk memuat dan menyimpan TaskItem objek.

The class defines the behavior to load and save TaskItem objects

Semua referensi ke pustaka PCL melalui TaskItemManager kelas .

Aplikasi Windows Telepon

Proyek Windows Telepon lengkap:

Windows Phone App The complete Windows Phone project

Diagram di bawah ini menyajikan kelas yang dikelompokkan ke dalam lapisan:

This diagram presents the classes grouped into layers

Referensi

Proyek khusus platform harus mereferensikan pustaka khusus platform yang diperlukan (seperti Microsoft.Phone dan System.Windows) untuk membuat aplikasi Windows Telepon yang valid.

Ini juga harus mereferensikan proyek PCL (misalnya) TaskyPortableLibraryuntuk menggunakan TaskItem kelas dan database.

TaskyPortableLibrary to utilize the TaskItem class and database

Lapisan Aplikasi (AL)

Sekali lagi, seperti halnya versi iOS dan Android, lapisan aplikasi terdiri dari elemen non-visual yang membantu mengikat data ke antarmuka pengguna.

ViewModels

ViewModels membungkus data dari PCL ( TaskItemManager) dan menyajikannya dengan cara yang dapat dikonsumsi oleh pengikatan data Silverlight/XAML. Ini adalah contoh perilaku khusus platform (seperti yang dibahas dalam dokumen Aplikasi Lintas Platform).

Antarmuka Pengguna (UI)

XAML memiliki kemampuan pengikatan data unik yang dapat dideklarasikan dalam markup dan mengurangi jumlah kode yang diperlukan untuk menampilkan objek:

  1. Pages – File XAML dan codebehind menentukan antarmuka pengguna dan mereferensikan ViewModels dan proyek PCL untuk menampilkan dan mengumpulkan data.
  2. Gambar – Layar splash, gambar latar belakang, dan ikon adalah bagian utama dari antarmuka pengguna.

MainPage

Kelas MainPage menggunakan TaskListViewModel untuk menampilkan data menggunakan fitur pengikatan data XAML. Halaman DataContext diatur ke model tampilan, yang diisi secara asinkron. {Binding} Sintaks dalam XAML menentukan bagaimana data ditampilkan.

TaskDetailsPage

Setiap tugas ditampilkan dengan mengikat TaskViewModel ke XAML yang ditentukan dalam TaskDetailsPage.xaml. Data tugas diambil melalui TaskItemManager di Lapisan Bisnis.

Hasil

Aplikasi yang dihasilkan terlihat seperti ini di setiap platform:

iOS

Aplikasi ini menggunakan desain antarmuka pengguna standar iOS, seperti tombol 'tambahkan' yang diposisikan di bilah navigasi dan menggunakan ikon plus bawaan (+). Ini juga menggunakan perilaku tombol 'kembali' default UINavigationController dan mendukung 'swipe-to-delete' dalam tabel.

It also uses the default UINavigationController back button behavior and supports swipe-to-delete in the tableIt also uses the default UINavigationController back button behavior and supports swipe-to-delete in the table

Android

Aplikasi Android menggunakan kontrol bawaan termasuk tata letak bawaan untuk baris yang memerlukan 'centang' yang ditampilkan. Perilaku kembali perangkat keras/sistem didukung selain tombol kembali di layar.

The hardware/system back behavior is supported in addition to an on-screen back buttonThe hardware/system back behavior is supported in addition to an on-screen back button

Windows Phone

Aplikasi Windows Telepon menggunakan tata letak standar, mengisi bilah aplikasi di bagian bawah layar, bukan bilah navigasi di bagian atas.

The Windows Phone app uses the standard layout, populating the app bar at the bottom of the screen instead of a nav bar at the topThe Windows Phone app uses the standard layout, populating the app bar at the bottom of the screen instead of a nav bar at the top

Ringkasan

Dokumen ini telah memberikan penjelasan terperinci tentang bagaimana prinsip desain aplikasi berlapis telah diterapkan ke aplikasi sederhana untuk memfasilitasi penggunaan kembali kode di tiga platform seluler: iOS, Android, dan Windows Telepon.

Ini telah menjelaskan proses yang digunakan untuk merancang lapisan aplikasi dan mendiskusikan kode & fungsionalitas apa yang telah diterapkan di setiap lapisan.

Kode dapat diunduh dari github.