Arsitektur perangkat lunak merupakan struktur sebuah sistem, yang meliputi elemen
perangkat lunak, sifat (property) yang tampak dari elemen itu, serta relasi di antara
elemen-elemen tersebut (Bass et al dalam Krafzig et al, 2004). Sifat yang tampak
misalnya fungsi apa saja yang disediakan oleh elemen, bagaimana kinerjanya,
bagaimana penanganan kesalahannya, sumber daya apa saja yang digunakan.
Menurut Erl (2009), ada tiga elemen yang saling berkaitan erat ketika berbicara
tentang arsitektur perangkat lunak. Pertama adalah arsitektur teknologi, yaitu desain
fisik dari suatu perangkat lunak. Kedua adalah infrastruktur teknologi, yaitu
lingkungan pendukung yang termasuk di dalamnya perangkat keras dan perangkat
lunak. Ketiga adalah perangkat lunak itu sendiri. Berikut adalah diagram sederhana
yang memperlihatkan keterkaitan ketiga elemen tersebut.
Istilah “arsitektur” berasal dari istilah yang digunakan pada bidang konstruksi
bangunan. Sebuah bangunan memiliki desain fisik yang digambarkan dalam cetak
biru arsitektur (architecture blueprint) atau disebut juga spesifikasi arsitektur. Suatu
bangunan berada dalam lingkungan tertentu. Lingkungan ini bisa memberikan
dukungan ataupun tidak terhadap bangunan tersebut. Sebagai contoh, bangunan
perumahan yang dididukung oleh sarana transportasi, pembangkit tenaga listrik, dan
sistem pembuangan limbah. Lingkungan pendukung inilah yang disebut infrastruktur.
Agar bangunan dapat memanfaatkan infrastruktur tersebut, desain fisiknya harus
mengintegrasikan berbagai infrasturktur tadi ke dalam arsitekturnya. Oleh karena itu,
spesifikasi arsitektur sebuah bangunan haruslah memperhatikan infrastruktur di
sekitarnya. Begitu juga dengan perangkat lunak, rancangan arsitekturnya harus
memperhatikan infrastruktur di mana perangkat lunak ini akan ditempatkan
Arsitektur Perangkat Lunak (Software Architecture)
Iseng-iseng baca buku Microsoft Application Architecture Guide v2 dari Microsoft, ternyata ada yg menarik yg
ingin gw rangkum.
Separation of concern :memisahkan layer aplikasi dari sisi fungsionalitas nya agar fitur aplikasi tidak
overlap
Single responsibility principle :setiap komponen hanya bertanggung jawab pada 1 fungsionalitas atau
gabungan fungsionalitas sejenis
Principle of least knowledge :komponen /object tidak perlu mengetahui detail dari object lain.
Don't repeat yourself :suatu fungsionalitas seharusnya hanya ada pada 1 object dan tidak dikomponen
lain, sehingga menghindari copy-paste.
Minimize upfront design :hanya mendisain yg dibutuhkan saja
Design Practise
Menjaga pattern desain konsisten setiap layer.
Tidak melakukan duplikasi fungsionalitas dalam sebuah aplikasi
"Prefer composition to inheritance" karena inheritance menimbulkan ketergantungan yg lebih kepada
parrent class, sehingga membuat reuse dari child class terbatas.
Menerapkan style coding dan naming convention dalam development nya.
Memaintain system QA selama proses development
Memperhatikan sisi operation
Key Architecture Style
Client/Server : memisahkan aplikasi menjadi 2 dimana client membuat request ke server. Dalam
banyak kasus sebuah server adalah database dengan fungsionalitas direpresentasikan dalam sebuah
storeprocedure. Yg termasuk style ini diantaranya:Client-Queue-Client System (komunikasi client berbasis
queuing server), Peer-to-Peer application, Application Server (server host and execute application)
Component Base Architecture: memisahkan komponen aplikasi berdasarkan fungsionalitas yg
reusable. Pertimbangan yg mendasarinya: reusable, replaceable, not context spesific, extensible, encapsulated &
independent.
Domain Driven Design: mendefinisikan object-2 bisnis ke dalam 1 domain bisnis.
Layered Architecture: memecah concern ke dalam beberapa layer aplikasi. Pertimbangannya:
abstraction, encapsulation, clearly defined functional layer, high cohesion, reusable, loose coupling.
Message Bus: sebuah style yg menyediakan aplikasi yg bisa berinteraksi dengan menggunakan satu
atau lebih chanel komunikasi
N-Tier/3-Tier: memisahkan fungsional ke dlm aplikasi yg berlokasi di beberapa komputer.
Object Oriented: arsitektur yg berorientasi object (memiliki karakteristik OOP)
Service Oriented Architecture (SOA): arsitektur yg menempatkan fungsionalitas aplikasi kedalam
sebuah service.
Overview of Layered Application Umumnya penggunaan layering dalam suatu aplikasi meliputi 3 layer
utama: Presentation, Business & Data Layer.
Sedangkan untuk Services Layer ada diantara Business & Presentation Layer. Langkah -2 mendisain untuk
sistem berbasis layer ini adalah:
Memilih strategi layer yg tepat / yg diperlukan
Memutuskan cara mendistribusikan layer dan komponen
Menentukan apakah akan memecah layer
Merumuskan aturan interaksi masing-masing layer
Mengidentifikasikan Crosscutting Concern (Fungsional umum) spt: logging, caching, validation,
authentication, & exception management
Mendefinisikan interface masing-2 layer
Memilih strategy deployment
Memilih protokol komunikasi
Layer Presentation
UI Component: Elemen visual untuk mendisplay informasi ke user dan menerima input.
UI Process Component: Menyediakan code yg berisi behavior & struktur aplikasi yg penempatannya terpisah
dari UI.
Beberapa hal yg patut dipertimbangkan dalam mendesain layer ini:
Communication
Caching
Composition
Exception Management
Navigation
User Experience
User Experience
User Interface
Validation
Layer Bisnis
Terdiri dari: 1. Application Facade : (Optional) Menyediakan interface ke komponen business logic, diantaranya
dengan menggabungkan beberapa operasi bisnis ke sebuah operation. Ini mengurangi dependency krn external
caller tidak perlu mengetahui detail komponen bisnis dan teknik interaksinya.
2. Business Logic Component : Fokus pada retrieving, processing, transformation & management data.
Termasuk dalam kategori ini adalah:
Business Workflow Component
Business Entity Component