Baca dalam bahasa Inggris

Bagikan melalui


Pustaka Kelas Portabel (PCL)

Tip

Pustaka Kelas Portabel (PCL) dianggap tidak digunakan lagi dalam versi terbaru Visual Studio. Meskipun Anda masih dapat membuka, mengedit, dan mengkompilasi PCL, untuk proyek baru disarankan untuk menggunakan pustaka .NET Standard untuk mengakses area permukaan API yang lebih besar.

Komponen utama dari membangun aplikasi lintas platform adalah dapat berbagi kode di berbagai proyek khusus platform. Namun, ini rumit oleh fakta bahwa platform yang berbeda sering menggunakan sub-set yang berbeda dari .NET Base Class Library (BCL), dan oleh karena itu sebenarnya dibangun ke Profil Pustaka .NET Core yang berbeda. Ini berarti bahwa setiap platform hanya dapat menggunakan pustaka kelas yang ditargetkan ke profil yang sama sehingga mereka akan tampak memerlukan proyek pustaka kelas terpisah untuk setiap platform.

Ada tiga pendekatan utama untuk berbagi kode yang mengatasi masalah ini: proyek .NET Standard, Proyek Aset Bersama, dan proyek Pustaka Kelas Portabel (PCL).

  • Proyek .NET Standard adalah pendekatan yang lebih disukai untuk berbagi kode .NET, baca selengkapnya tentang proyek .NET Standard dan Xamarin.
  • Proyek Aset Bersama menggunakan satu set file dan menawarkan cara cepat dan sederhana untuk berbagi kode dalam solusi dan umumnya menggunakan arahan kompilasi bersyarat untuk menentukan jalur kode untuk berbagai platform yang akan menggunakannya (untuk informasi selengkapnya lihat artikel Proyek Bersama).
  • Proyek PCL menargetkan profil tertentu yang mendukung serangkaian kelas/fitur BCL yang diketahui. Namun, sisi bawah pcl adalah bahwa mereka sering membutuhkan upaya arsitektur ekstra untuk memisahkan kode spesifik profil ke dalam pustaka mereka sendiri.

Halaman ini menjelaskan cara membuat proyek PCL yang menargetkan profil tertentu, yang kemudian dapat dirujuk oleh beberapa proyek khusus platform.

Apa itu Pustaka Kelas Portabel?

Saat Anda membuat Proyek Aplikasi atau Proyek Pustaka, DLL yang dihasilkan dibatasi untuk mengerjakan platform tertentu yang dibuatnya. Ini mencegah Anda menulis rakitan untuk aplikasi Windows, lalu menggunakannya kembali di Xamarin.iOS dan Xamarin.Android.

Namun, saat membuat Pustaka Kelas Portabel, Anda dapat memilih kombinasi platform yang ingin dijalankan kode Anda. Pilihan kompatibilitas yang Anda buat saat membuat Pustaka Kelas Portabel diterjemahkan ke dalam pengidentifikasi "Profil", yang menjelaskan platform mana yang didukung pustaka.

Tabel di bawah ini menunjukkan beberapa fitur yang bervariasi menurut platform .NET. Untuk menulis rakitan PCL yang dijamin berjalan pada perangkat/platform tertentu, Anda cukup memilih dukungan mana yang diperlukan saat membuat proyek.

Fitur .NET Framework Aplikasi UWP Silverlight Windows Phone Xamarin
Inti Y Y Y Y Y
LINQ Y Y Y Y Y
IQueryable Y Y Y 7.5+ Y
Serialisasi Y Y Y Y Y
Anotasi Data 4.0.3 + Y Y Y

Kolom Xamarin mencerminkan fakta bahwa Xamarin.iOS dan Xamarin.Android mendukung semua profil yang dikirimkan dengan Visual Studio, dan ketersediaan fitur di pustaka apa pun yang Anda buat hanya akan dibatasi oleh platform lain yang Anda pilih untuk didukung.

Ini termasuk profil yang merupakan kombinasi dari:

  • .NET 4 atau .NET 4.5
  • Silverlight 5
  • Windows Phone 8
  • Aplikasi UWP

Anda dapat membaca selengkapnya tentang berbagai kemampuan profil di situs web Microsoft dan melihat ringkasan profil PCL anggota komunitas lain yang mencakup info kerangka kerja yang didukung dan catatan lainnya.

Keuntungan

  1. Berbagi kode terpusat - menulis dan menguji kode dalam satu proyek yang dapat dikonsumsi oleh pustaka atau aplikasi lain.
  2. Operasi pemfaktoran ulang akan memengaruhi semua kode yang dimuat dalam solusi (Pustaka Kelas Portabel dan proyek khusus platform).
  3. Proyek PCL dapat dengan mudah dirujuk oleh proyek lain dalam solusi, atau perakitan output dapat dibagikan bagi orang lain untuk dirujuk dalam solusi mereka.

Kerugian

  1. Karena Pustaka Kelas Portabel yang sama dibagikan antara beberapa aplikasi, pustaka khusus platform tidak dapat direferensikan (misalnya. Community.CsharpSqlite.WP7).
  2. Subset Pustaka Kelas Portabel mungkin tidak menyertakan kelas yang akan tersedia di MonoTouch dan Mono untuk Android (seperti DllImport atau System.IO.File).

Catatan

Pustaka Kelas Portabel telah ditolak dalam versi terbaru Visual Studio, dan Pustaka Standar .NET direkomendasikan sebagai gantinya.

Untuk beberapa tingkat kedua kelemahan dapat dihindari menggunakan pola Penyedia atau Injeksi Dependensi untuk mengkodekan implementasi aktual dalam proyek platform terhadap antarmuka atau kelas dasar yang didefinisikan dalam Pustaka Kelas Portabel.

Diagram ini menunjukkan arsitektur aplikasi lintas platform menggunakan Pustaka Kelas Portabel untuk berbagi kode, tetapi juga menggunakan Injeksi Dependensi untuk meneruskan fitur yang bergantung pada platform:

Diagram ini menunjukkan arsitektur aplikasi lintas platform menggunakan Pustaka Kelas Portabel untuk berbagi kode, tetapi juga menggunakan Injeksi Dependensi untuk meneruskan fitur yang bergantung pada platform

Panduan Visual Studio untuk Mac

Bagian ini menjelaskan cara membuat dan menggunakan Pustaka Kelas Portabel menggunakan Visual Studio untuk Mac. Lihat bagian Contoh PCL untuk implementasi lengkap.

Membuat PCL

Menambahkan Pustaka Kelas Portabel ke solusi Anda sangat mirip dengan menambahkan proyek Pustaka biasa.

  1. Dalam dialog Proyek Baru pilih opsi Pustaka Portabel Pustaka > Multiplatform>:

    Membuat proyek PCL baru

  2. Saat PCL dibuat di Visual Studio untuk Mac, PCL secara otomatis dikonfigurasi dengan Profil yang berfungsi untuk Xamarin.iOS dan Xamarin.Android. Proyek PCL akan muncul seperti yang ditunjukkan pada cuplikan layar ini:

    Proyek PCL di pad solusi

PCL sekarang siap untuk ditambahkan kode. Ini juga dapat dirujuk oleh proyek lain (Proyek aplikasi, proyek Pustaka dan bahkan proyek PCL lainnya).

Mengedit pengaturan PCL

Untuk melihat dan mengubah pengaturan PCL untuk proyek ini, klik kanan proyek dan pilih Opsi > Bangun > Umum untuk melihat layar yang diperlihatkan di sini:

Opsi Proyek PCL untuk mengatur profil

Klik Ubah... untuk mengubah profil target untuk pustaka kelas portabel ini.

Jika profil diubah setelah kode ditambahkan ke PCL, ada kemungkinan bahwa pustaka tidak akan lagi dikompilasi jika kode mereferensikan fitur yang bukan bagian dari profil yang baru dipilih.

Bekerja dengan PCL

Ketika kode ditulis dalam pustaka PCL, editor Visual Studio untuk Mac akan mengenali batasan profil yang dipilih dan menyesuaikan opsi lengkapi otomatis yang sesuai. Misalnya, cuplikan layar ini menunjukkan opsi lengkapi otomatis untuk System.IO menggunakan profil default (Profile136) yang digunakan di Visual Studio untuk Mac - perhatikan bilah gulir yang menunjukkan sekitar setengah dari kelas yang tersedia ditampilkan (sebenarnya hanya ada 14 kelas yang tersedia).

Daftar Intellisense dari 14 kelas di kelas System.IO PCL

Bandingkan dengan System.IO lengkapi otomatis dalam proyek Xamarin.iOS atau Xamarin.Android - ada 40 kelas yang tersedia termasuk kelas yang umum digunakan seperti File dan Directory yang tidak ada di profil PCL apa pun.

Daftar Intellisense dari 40 kelas di .NET Framework System.IO namespace

Ini mencerminkan trade-off yang mendasar dari penggunaan PCL - kemampuan untuk berbagi kode dengan mulus di banyak platform berarti API tertentu tidak tersedia untuk Anda karena mereka tidak memiliki implementasi yang sebanding di semua platform yang mungkin.

Menggunakan PCL

Setelah proyek PCL dibuat, Anda dapat menambahkan referensi ke dalamnya dari proyek Aplikasi atau Pustaka yang kompatibel dengan cara yang sama seperti biasanya Anda menambahkan referensi. Di Visual Studio untuk Mac, klik kanan pada simpul Referensi dan pilih Edit Referensi... lalu beralih ke tab Proyek seperti yang ditunjukkan:

Menambahkan referensi ke PCL melalui opsi Edit Referensi

Cuplikan layar berikut menunjukkan pad Solusi untuk aplikasi sampel TaskyPortable, memperlihatkan pustaka PCL di bagian bawah dan referensi ke pustaka PCL tersebut di proyek Xamarin.iOS.

Solusi sampel TaskyPortable memperlihatkan proyek PCL

Output dari PCL (yaitu DLL perakitan yang dihasilkan) juga dapat ditambahkan sebagai referensi ke sebagian besar proyek. Hal ini menjadikan PCL cara ideal untuk mengirim komponen dan pustaka lintas platform.

Contoh PCL

Aplikasi sampel TaskyPortable menunjukkan bagaimana Pustaka Kelas Portabel dapat digunakan dengan Xamarin. Berikut adalah beberapa cuplikan layar aplikasi yang dihasilkan yang berjalan di iOS dan Android:

Berikut adalah beberapa cuplikan layar aplikasi yang dihasilkan yang berjalan di iOS, Android, dan Windows Telepon

Ini berbagi sejumlah kelas data dan logika yang murni kode portabel, dan juga menunjukkan cara menggabungkan persyaratan khusus platform menggunakan Injeksi Dependensi untuk implementasi database SQLite.

Struktur solusi ditunjukkan di bawah ini (masing-masing di Visual Studio untuk Mac dan Visual Studio):

Struktur solusi ditampilkan di sini di Visual Studio untuk Mac dan Visual Studio masing-masing

Karena kode SQLite-NET memiliki bagian khusus platform (untuk bekerja dengan implementasi SQLite pada setiap sistem operasi yang berbeda) untuk tujuan demonstrasi telah direfaktorkan ke dalam kelas abstrak yang dapat dikompilasi ke dalam Pustaka Kelas Portabel, dan kode aktual yang diterapkan sebagai subkelas dalam proyek iOS dan Android.

TaskyPortableLibrary

Pustaka Kelas Portabel terbatas dalam fitur .NET yang dapat didukungnya. Karena dikompilasi untuk berjalan pada beberapa platform, itu tidak dapat menggunakan [DllImport] fungsionalitas yang digunakan dalam SQLite-NET. Sebaliknya SQLite-NET diimplementasikan sebagai kelas abstrak, lalu direferensikan melalui sisa kode bersama. Ekstrak API abstrak ditunjukkan di bawah ini:

C#
public abstract class SQLiteConnection : IDisposable {

    public string DatabasePath { get; private set; }
    public bool TimeExecution { get; set; }
    public bool Trace { get; set; }
    public SQLiteConnection(string databasePath) {
         DatabasePath = databasePath;
    }
    public abstract int CreateTable<T>();
    public abstract SQLiteCommand CreateCommand(string cmdText, params object[] ps);
    public abstract int Execute(string query, params object[] args);
    public abstract List<T> Query<T>(string query, params object[] args) where T : new();
    public abstract TableQuery<T> Table<T>() where T : new();
    public abstract T Get<T>(object pk) where T : new();
    public bool IsInTransaction { get; protected set; }
    public abstract void BeginTransaction();
    public abstract void Rollback();
    public abstract void Commit();
    public abstract void RunInTransaction(Action action);
    public abstract int Insert(object obj);
    public abstract int Update(object obj);
    public abstract int Delete<T>(T obj);

    public void Dispose()
    {
        Close();
    }
    public abstract void Close();

}

Sisa kode bersama menggunakan kelas abstrak untuk "menyimpan" dan "mengambil" objek dari database. Dalam aplikasi apa pun yang menggunakan kelas abstrak ini, kita harus meneruskan implementasi lengkap yang menyediakan fungsionalitas database aktual.

TaskyAndroid dan TaskyiOS

Proyek aplikasi iOS dan Android berisi antarmuka pengguna dan kode khusus platform lainnya yang digunakan untuk menghubungkan kode bersama di PCL.

Proyek-proyek ini juga berisi implementasi API database abstrak yang berfungsi pada platform tersebut. Pada iOS dan Android, mesin database Sqlite bawaan ke sistem operasi, sehingga implementasinya dapat digunakan [DllImport] seperti yang ditunjukkan untuk menyediakan implementasi konektivitas database yang konkret. Kutipan kode implementasi khusus platform ditampilkan di sini:

C#
[DllImport("sqlite3", EntryPoint = "sqlite3_open")]
public static extern Result Open(string filename, out IntPtr db);

[DllImport("sqlite3", EntryPoint = "sqlite3_close")]
public static extern Result Close(IntPtr db);

Implementasi lengkap dapat dilihat dalam kode sampel.

Ringkasan

Artikel ini telah secara singkat membahas manfaat dan jebakan Pustaka Kelas Portabel, menunjukkan cara membuat dan menggunakan PCL dari dalam Visual Studio untuk Mac dan Visual Studio; dan akhirnya memperkenalkan aplikasi sampel lengkap – TaskyPortable – yang menunjukkan PCL yang sedang beraksi.