Artikel

Apa itu pola desain: mengapa menggunakannya, klasifikasi, pro dan kontra

Dalam rekayasa perangkat lunak, pola desain merupakan solusi optimal terhadap permasalahan yang biasa terjadi dalam desain perangkat lunak.

Itu seperti pra proyekdefimalam ini, alat yang telah dicoba dan diuji yang dapat Anda sesuaikan untuk memecahkan masalah desain yang berulang dalam kode Anda.

Perkiraan waktu membaca: 6 minuti

Apa itu Pola Desain

Pola desain bukanlah kode yang bisa kita salin dan sisipkan ke dalam program kita, seperti yang bisa kita lakukan dengan fungsi atau pustaka standar. Pola desain merupakan suatu konsep umum yang mampu memecahkan suatu permasalahan tertentu. Pada dasarnya sebuah model yang detailnya dapat kami ikuti dan terapkan solusi yang sesuai dengan realitas program kami.

Model sering kali dikacaukan dengan algoritma, karena kedua konsep tersebut menggambarkan solusi tipikal untuk beberapa masalah yang diketahui. Sedangkan suatu algoritma defiJika selalu ada serangkaian tindakan yang jelas yang dapat mencapai tujuan tertentu, model adalah deskripsi solusi pada tingkat yang lebih tinggi. Kode dari model yang sama yang diterapkan pada dua program berbeda mungkin berbeda.

Jika ingin dianalogikan, kita bisa memikirkan resep masakannya: sama-sama memiliki langkah yang jelas untuk mencapai suatu tujuan. Namun, model lebih seperti sebuah proyek, yang mana Anda dapat melihat apa hasil dan karakteristiknya, tetapi urutan implementasi yang tepat bergantung pada kita yang menulis kodenya.

Terbuat dari apakah Pola Desain?

Kebanyakan pola dideskripsikan dengan sangat formal sehingga orang dapat mereproduksinya dalam banyak konteks. Mari kita lihat di bawah elemen-elemen yang ada dalam deskripsi suatu model:

  • Niatnya model tersebut secara singkat menjelaskan masalah dan solusinya.
  • Motivasi menjelaskan lebih lanjut masalah dan solusi yang dimungkinkan oleh model.
  • Strukturnya kelas menunjukkan setiap bagian model dan bagaimana mereka berhubungan.
  • Contoh kode dalam salah satu bahasa pemrograman terpopuler memudahkan untuk memahami ide di balik model.

Mengapa menggunakannya?

Seorang programmer dapat mengembangkan perangkat lunak tanpa mengetahui keberadaan pola desain. Banyak yang melakukan hal tersebut, dan karena alasan ini mereka menerapkan beberapa skema tanpa menyadarinya. Namun mengapa kita harus meluangkan waktu untuk mempelajarinya?

  • Pola desain adalah seperangkat solusi yang telah dicoba dan diuji untuk masalah umum dalam desain perangkat lunak. Bahkan jika Anda tidak pernah menghadapi masalah ini, mengetahui pola tetap berguna karena mengajarkan Anda cara menyelesaikan semua jenis masalah menggunakan prinsip desain berorientasi objek.
  • Model desain defiMereka menciptakan bahasa umum yang dapat Anda dan tim Anda gunakan untuk berkomunikasi dengan lebih efektif. Anda bisa berkata, “Oh, gunakan saja Singleton untuk melakukan ini,” dan semua orang akan memahami ide di balik saran Anda. Tidak perlu dijelaskan apa itu singleton jika sudah mengetahui pola dan namanya.

Klasifikasi Pola Desain

Pola desain berbeda dalam kompleksitas, tingkat detail, dan skala penerapan di seluruh sistem yang dirancang.

Dengan analogi, kita dapat membuat persimpangan lebih aman dengan memasang beberapa lampu lalu lintas atau membangun persimpangan bertingkat dengan jalur bawah tanah untuk pejalan kaki.

Model tingkat rendah yang paling dasar sering disebut idiom . Biasanya hanya berlaku untuk satu bahasa pemrograman.

Model yang paling universal dan tingkat tinggi adalah model arsitektur . Pengembang dapat menerapkan pola ini di hampir semua bahasa. Tidak seperti pola lainnya, pola ini dapat digunakan untuk merancang arsitektur seluruh aplikasi.

Selanjutnya semua model dapat diklasifikasikan menurutnya mencoba atau tujuan. Tiga kelas utama tersebut adalah:

Buletin inovasi
Jangan lewatkan berita terpenting tentang inovasi. Daftar untuk menerimanya melalui email.
  • Model kreasi mereka menyediakan mekanisme pembuatan objek yang meningkatkan fleksibilitas dan penggunaan kembali kode yang ada.
  • Model struktural mereka menjelaskan cara merakit objek dan kelas menjadi struktur yang lebih besar, menjaga struktur ini tetap fleksibel dan efisien.
  • Model perilaku mereka berurusan dengan komunikasi yang efektif dan pembagian tanggung jawab antar objek.

Contoh Pola Desain di Laravel: Facade

Fasad adalah pola desain struktural yang menyediakan antarmuka yang disederhanakan ke perpustakaan, kerangka kerja, atau kumpulan kelas kompleks lainnya.

Masalah

Mari kita asumsikan kita perlu membuat perangkat lunak berfungsi, berdasarkan pada sekumpulan besar objek milik perpustakaan atau kerangka kerja yang canggih. Biasanya, kita perlu menginisialisasi semua objek ini, melacak dependensi, mengeksekusi metode dalam urutan yang benar, dan seterusnya.

Akibatnya, logika bisnis kelas akan menjadi sangat terkait dengan detail implementasi kelas pihak ketiga, sehingga sulit untuk dipahami dan dikelola.

Larutan

sebuah facade adalah kelas yang menyediakan antarmuka sederhana ke subsistem kompleks yang berisi banyak bagian yang bergerak. A facade mungkin menyediakan fungsionalitas terbatas dibandingkan dengan bekerja secara langsung dengan subsistem. Namun, ini hanya mencakup fitur-fitur yang benar-benar dipedulikan pelanggan.

Punya satu facade ini berguna ketika kita perlu mengintegrasikan aplikasi dengan perpustakaan canggih yang memiliki lusinan fitur, namun kita hanya memerlukan sebagian kecil dari fungsinya.

Misalnya, aplikasi yang mengunggah video pendek lucu dengan kucing ke media sosial berpotensi menggunakan perpustakaan konversi video profesional. Namun, yang kita perlukan hanyalah kelas dengan metode tunggal encode(filename, format). Setelah membuat kelas seperti itu dan menghubungkannya ke perpustakaan konversi video, kita akan memiliki kelas pertama facade.

Misalnya, operator telepon suatu call center adalah seperti a facade. Faktanya, ketika kita menghubungi layanan telepon toko untuk melakukan pemesanan melalui telepon, operator adalah milik kita facade terhadap semua layanan dan departemen toko. Operator menyediakan antarmuka suara sederhana ke sistem pemesanan, gateway pembayaran, dan berbagai layanan pengiriman.

Contoh nyata di PHP

Memikirkan tentang Fasad sebagai adaptor sederhana untuk beberapa subsistem yang kompleks. Facade mengisolasi kompleksitas dalam satu kelas dan memungkinkan kode aplikasi lain menggunakan antarmuka sederhana.

Dalam contoh ini, Facade menyembunyikan kompleksitas API YouTube dan perpustakaan FFmpeg dari kode klien. Daripada bekerja dengan lusinan kelas, klien menggunakan metode sederhana di Fasad.

<?php

namespace RefactoringGuru\Facade\RealWorld;

/**
 * The Facade provides a single method for downloading videos from YouTube. This
 * method hides all the complexity of the PHP network layer, YouTube API and the
 * video conversion library (FFmpeg).
 */
class YouTubeDownloader
{
    protected $youtube;
    protected $ffmpeg;

    /**
     * It is handy when the Facade can manage the lifecycle of the subsystem it
     * uses.
     */
    public function __construct(string $youtubeApiKey)
    {
        $this->youtube = new YouTube($youtubeApiKey);
        $this->ffmpeg = new FFMpeg();
    }

    /**
     * The Facade provides a simple method for downloading video and encoding it
     * to a target format (for the sake of simplicity, the real-world code is
     * commented-out).
     */
    public function downloadVideo(string $url): void
    {
        echo "Fetching video metadata from youtube...\n";
        // $title = $this->youtube->fetchVideo($url)->getTitle();
        echo "Saving video file to a temporary file...\n";
        // $this->youtube->saveAs($url, "video.mpg");

        echo "Processing source video...\n";
        // $video = $this->ffmpeg->open('video.mpg');
        echo "Normalizing and resizing the video to smaller dimensions...\n";
        // $video
        //     ->filters()
        //     ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
        //     ->synchronize();
        echo "Capturing preview image...\n";
        // $video
        //     ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
        //     ->save($title . 'frame.jpg');
        echo "Saving video in target formats...\n";
        // $video
        //     ->save(new FFMpeg\Format\Video\X264(), $title . '.mp4')
        //     ->save(new FFMpeg\Format\Video\WMV(), $title . '.wmv')
        //     ->save(new FFMpeg\Format\Video\WebM(), $title . '.webm');
        echo "Done!\n";
    }
}

/**
 * The YouTube API subsystem.
 */
class YouTube
{
    public function fetchVideo(): string { /* ... */ }

    public function saveAs(string $path): void { /* ... */ }

    // ...more methods and classes...
}

/**
 * The FFmpeg subsystem (a complex video/audio conversion library).
 */
class FFMpeg
{
    public static function create(): FFMpeg { /* ... */ }

    public function open(string $video): void { /* ... */ }

    // ...more methods and classes... RU: ...дополнительные методы и классы...
}

class FFMpegVideo
{
    public function filters(): self { /* ... */ }

    public function resize(): self { /* ... */ }

    public function synchronize(): self { /* ... */ }

    public function frame(): self { /* ... */ }

    public function save(string $path): self { /* ... */ }

    // ...more methods and classes... RU: ...дополнительные методы и классы...
}


/**
 * The client code does not depend on any subsystem's classes. Any changes
 * inside the subsystem's code won't affect the client code. You will only need
 * to update the Facade.
 */
function clientCode(YouTubeDownloader $facade)
{
    // ...

    $facade->downloadVideo("https://www.youtube.com/watch?v=QH2-TGUlwu4");

    // ...
}

$facade = new YouTubeDownloader("APIKEY-XXXXXXXXX");
clientCode($facade);

Ercole Palmeri

Buletin inovasi
Jangan lewatkan berita terpenting tentang inovasi. Daftar untuk menerimanya melalui email.

Artikel Terbaru

Intervensi inovatif dalam Augmented Reality, dengan penampil Apple di Poliklinik Catania

Operasi oftalmoplasti menggunakan penampil komersial Apple Vision Pro dilakukan di Poliklinik Catania…

3 Mei 2024

Manfaat Halaman Mewarnai untuk Anak - dunia keajaiban untuk segala usia

Mengembangkan keterampilan motorik halus melalui mewarnai mempersiapkan anak untuk keterampilan yang lebih kompleks seperti menulis. Mewarnai…

2 Mei 2024

Masa Depan Ada di Sini: Bagaimana Industri Perkapalan Merevolusi Perekonomian Global

Sektor angkatan laut adalah kekuatan ekonomi global sejati, yang telah menuju pasar 150 miliar...

1 Mei 2024

Penerbit dan OpenAI menandatangani perjanjian untuk mengatur aliran informasi yang diproses oleh Kecerdasan Buatan

Senin lalu, Financial Times mengumumkan kesepakatan dengan OpenAI. FT melisensikan jurnalisme kelas dunianya…

April 30 2024