Apa perbedaan antara pola desain dan pola arsitektur?


119

Saat kita membaca tentang pola desain di internet kita perhatikan ada 3 kategori:

  • Kreasi
  • Struktural
  • Perilaku

Namun ketika kita membuat arsitektur sebuah perangkat lunak, maka kita memikirkan MVP, MVC atau MVVM.

Misalnya, di antara pola kreasi saya menemukan pola singleton , tetapi saya juga menggunakan singleton di MPV saya.

Jadi pertanyaan saya adalah: Apakah pola desain merupakan keseluruhan struktur produk?

  • Jika ya, lalu bagaimana singleton bisa menjadi pola desain? Karena saya bisa menggunakannya di mana saja di aplikasi saya. Pada dasarnya, ini dibatasi hanya untuk membuat satu instance dalam satu waktu di memori, tetapi bukankah konsep ini menentukan bagaimana perangkat lunak dirancang?

  • Jika tidak, lalu di manakah MVP, MVC, dan MVVM dalam tiga kategori pola? Dan apa perbedaan antara desain dan arsitektur perangkat lunak?



2
Lihat daftar pola desain dan sumber pola arsitektur ini github.com/DovAmir/awesome-design-patterns
dov.amir

Jawaban:


174

Ini membutuhkan penjelasan rinci tetapi saya akan mencoba membuat sketsa perbedaan tersebut sebaik pengetahuan saya.

Pola adalah kesamaan yang Anda temukan dalam program. Ini memungkinkan kita untuk mendekonstruksi struktur kompleks yang besar dan membangun menggunakan bagian-bagian sederhana. Ini memberikan solusi umum untuk kelas masalah.

Perangkat lunak yang besar dan kompleks melewati serangkaian dekonstruksi pada tingkat yang berbeda. Pada tingkat yang lebih besar, pola arsitektur adalah alatnya. Pada level yang lebih kecil, pola desain adalah alatnya dan pada level implementasi, paradigma pemrograman adalah alatnya.

Suatu pola dapat terjadi pada tingkat yang sangat berbeda. Lihat Fraktal . Pengurutan cepat, Pengurutan gabungan adalah semua pola algoritmik untuk mengatur sekelompok elemen dalam urutan.

Untuk tampilan yang paling sederhana:

  • Paradigma pemrograman - khusus untuk bahasa pemrograman
  • Pola desain - memecahkan masalah yang berulang dalam konstruksi perangkat lunak
  • Pola arsitektur - organisasi struktural fundamental untuk sistem perangkat lunak

Idiom adalah teknik pemrograman khusus paradigma dan bahasa yang mengisi detail tingkat rendah.

Pola desain biasanya dikaitkan dengan kesamaan level kode. Ini menyediakan berbagai skema untuk menyempurnakan dan membangun subsistem yang lebih kecil. Biasanya dipengaruhi oleh bahasa pemrograman. Beberapa pola menjadi tidak penting karena paradigma bahasa . Pola desain adalah taktik skala menengah yang menyempurnakan beberapa struktur dan perilaku entitas dan hubungannya.

Sedangkan pola arsitektur dipandang sebagai kesamaan pada tingkat yang lebih tinggi daripada pola desain. Pola arsitektur adalah strategi tingkat tinggi yang menyangkut komponen skala besar, properti global, dan mekanisme sistem.

Bagaimana pola diperoleh? Melalui:

  1. penggunaan kembali,
  2. klasifikasi
  3. dan akhirnya abstraksi untuk menyaring kesamaan.

Jika Anda telah mengikuti pemikiran yang diletakkan di atas. Anda akan melihat bahwa Singleton adalah "pola desain" sedangkan MVC adalah salah satu pola "arsitektural" untuk menangani pemisahan perhatian.

Cobalah membaca:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern

14
Dilakukan dengan sangat baik dan diuraikan. Sekarang saya hanya berharap semua orang akan menggunakan istilah yang berbeda seperti yang Anda taruh di sini. Bolehkah saya menempelkan cetakan jawaban Anda di dinding di atas dispenser kopi departemen pemasaran kami.? Mungkin mereka akan mengerti suatu hari nanti. ;-)
dari

@ofi: Terima kasih! Penggunaan konstruksi bahasa dapat menyesatkan dan membimbing kita. Ini adalah sesuatu yang menurut saya cukup kuat.
pyfunc

+3 untuk Menyelamatkan kita dari Pertanyaan Wawancara :)
RAJESH KUMAR ARUMUGAM

Jawaban bagus, terima kasih !! seperti yang dikatakan @ofi, saya akan mencetaknya dan menyematkannya di dinding tim desain.
putar

11

Pola Desain adalah pola terkenal untuk memecahkan masalah teknis dengan cara yang telah terbukti berkali-kali. Pola desain adalah struktur dan praktik desain umum yang membuat perangkat lunak Berorientasi Objek dapat digunakan kembali. Contoh pola desain adalah Factory Pattern, Singleton, Facade, State, dll. Pola desain dapat digunakan untuk memecahkan masalah yang lebih kecil di seluruh aplikasi, dan lebih mudah untuk dimasukkan, diubah, ditambahkan daripada keseluruhan arsitektur

pola arsitektur adalah pola yang terkenal untuk memecahkan masalah arsitektur aplikasi perangkat lunak. Arsitektur aplikasi perangkat lunak adalah proses menentukan solusi terstruktur yang memenuhi semua persyaratan teknis dan operasional. Arsitektur aplikasi adalah keseluruhan 'organisasi' kode. Contoh Arsitektur yang berbeda mungkin MVC, MVVM, MVP, n-layer (yaitu UI-BLL-DAL), dll. Arsitektur biasanya perlu diputuskan di awal dan seringkali sulit untuk diubah setelah aplikasi dibangun.


1

Unsur arsitektur cenderung ke arah kumpulan kelas atau modul, umumnya direpresentasikan sebagai kotak. Diagram tentang arsitektur merepresentasikan level tertinggi yang melihat ke bawah, sedangkan diagram kelas berada pada level yang paling atomic. Tujuan dari pola arsitektur adalah untuk memahami bagaimana bagian-bagian utama sistem cocok satu sama lain, bagaimana pesan dan data mengalir melalui sistem, dan masalah struktural lainnya. Pola arsitektur menggunakan berbagai jenis komponen, masing-masing biasanya terdiri dari modul yang lebih kecil. Setiap komponen memiliki tanggung jawab dalam arsitektur. Pola desain adalah pola desain tingkat rendah atau tingkat kelas untuk partikel aplikasi yang lebih kecil.

Untuk informasi lebih lanjut: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns


0

Nah, untuk bagian utamanya adalah soal bahasa. Menurut pengalaman saya, batas antara desain dan arsitektur, menurut perangkat lunak, adalah sungai yang luas dengan lebarnya yang dihasilkan dari ketinggian air yang pada gilirannya terutama dipengaruhi oleh musim pemasaran. Umumnya istilah "desain" digunakan dengan aspek yang kuat dari perilaku produk perangkat lunak yang diakui oleh pengguna akhir, sedangkan "arsitektur" adalah singkatan dari struktur teknis perangkat lunak, yaitu komponen, perpustakaan, protokol, dan apa pun yang diperlukan untuk memenuhi rancangan. "Pola desain" mengambil dua peran: pertama dianggap sebagai praktik terbaik untuk menyelesaikan kategori masalah standar (lebih atau kurang), bukan produk; Kedua, mereka membantu para pengembang untuk berkomunikasi. Tetap dengan teladan Singleton Anda, ini memungkinkan kita untuk mengetahui tentang mekanisme hanya dengan menggunakan kata, alih-alih menjelaskan setiap saat, bahwa kita membuat satu instance dengan menggunakan ruang data yang ditentukan (variabel atau apa pun) yang diatur secara terkontrol dan dijamin akan satu-satunya, karena kami melindungi konstruktor kelas dll. Jadi IMHO jawaban singkat untuk pertanyaan Anda adalah: Itu tergantung pada siapa yang berbicara. Apakah itu masuk akal?


0

Pola Desain berbeda dengan Pola Arsitektur dalam cakupannya, lebih dilokalkan, berdampak lebih kecil pada basis kode, berdampak pada bagian tertentu dari basis kode, misalnya:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

Pola Arsitektur memiliki dampak yang luas pada basis kode, paling sering berdampak pada keseluruhan aplikasi baik secara horizontal (yaitu bagaimana menyusun kode di dalam lapisan) atau secara vertikal (yaitu bagaimana permintaan diproses dari lapisan luar menjadi lapisan dalam dan kembali). Contoh Pola Arsitektur: Model-View-Controller, Model-View-ViewModel

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.