Konsep dasar Design Pattern, Design Framework dan arsitektur software
Hola agan-agan semua
Ane bikin trit ini untuk menampung pertanyaan dan sekaligus diskusi tentang design pattern, design framework dan arsitektur software. Di samping itu ane sisipkan design pattern karena sangat dekat sekali hubungannya dengan deisgn aplikasi untuk enterprise.
Konsep-konsep di Enterprise Software Architect itu di antaranya:
- Development platform choice concern
- Application blocks
- Guidances (termasuk application design pattern dan design pattern)
- Service Bus
- Messaging
- Software factories
- Code Refactor
- Domain Specific Language (termasuk fluent interface)
- Enterprise CQRS
- Enterprise Framework guidance (TOGAF/ZACHMAN)
- Process Maturity model (CMMI)
Tambahan:
- Domain Specific Language
- Bad Smell
Perlu ane ingatkan, trit ini fokus untuk konseptual dan tidak membahas satu atau dua produk saja.
Trit ini untuk awalnya ane yang isikan.
Jangan lupa, diskusi di trit ini HARUS diskusi yang SEHAT.
Seperti dibawah ini:
Quote:
Diskusi yang sehat harusnya: 1- jangan sampe cuma kasi argumen yang setengah-setengah
2- jangan sampe mengarah ke personal, apalagi fanboys
3- satu topik aja dulu sampe habis, baru nanti mengarah ke topik lainnya. satu persatu dong, gan
4- kalo perlu kembali ke dasar teori dan dasar konsep, kenapa tidak?
5- maniak ke satu bahasa pemrograman? boleh aja. tapi ente bakalan kehilangan daya saing, gan. kenapa gak fokus di platform?
6- maniak atau fokus ke satu platform? silakan. tapi jangan sampe kejebak jadi fanboys lagi. apa ente masi ngaku jadi programmer kalo platform pilihan ente nantinya bisa mati dihajar platform lain? platform gak akan abadi, yang abadi hanyalah konseptual dan inovasi di balik platform itu sendiri.
7- maniak ke OOP dan imperative programming aja? silakan. tapi ente juga bakalan kehilangan daya saing juga, gan. sekarang juga jamannya functional programming, suka atau tidak
8- kalo discuss conceptual, ya conceptual. gak peduli bahasa program apapun.
catatan:
untuk nomer 8:
apa programmer gak perlu ngerti konsep? kalo gak ngerti konsep, ya ngaku aja. ane juga dengan senang hati ngaku kalo konsep ane ada yang salah.
ane sering bikin workshop tentang konseptual programming, dan sampe sekarang banyak peminatnya dan seringkali mereka jadi tambah mengkilat portfolio dan tentunya daya saing meningkat, daripada yang gak ngerti/gak mau tau konsep
Catatan tambahan:
- ente fokus platform dan ngerti design pattern, SOLID, DRY, static checker, covariance/contravariance, basic relational algebra, basic type theory, dasar teori kompilasi, dan jangan lupa ente bisa menerangkan dan menjelaskan itu semua ke developer laen, ane jamin ente udah punya kekuatan sebagai seorang senior dev.
- kalo ente selain menguasai kekuatan seniot dev di atas dan gak cuma fokus di platform tapi ente berani mengawinkan berbagai platform sesuai keperluan untuk mengatasi masalah bisnis, ente sudah memiliki bekal dasar sebagai seorang software architect, gan
Nah, semoga agan-agan semua siap menjadi Enterprise Software Architect!
Design pattern itu adalah pola-pola coding di OOP yang dapat digunakan lagi untuk kasus-kasus tertentu yang sudah didefinisikan.
Design pattern disini berawal dari design pattern yang dibuat oleh Gang of Four:
Erich Gamma
Richard Helm
John Vlissides
Ralph Johnson
Nah, design pattern ini selalu berkembang, tidak hanya design pattern yang ada di buku ini saja.
Pattern yang sangat terkenal dan banyak dipakai adalah:
- Singleton
- Abstract Factory
- Factory
- Builder
- Adapter (atau Adaptor)
- Bridge
- Command
- Facade
- Strategy
Original Posted By erilive►Pertama, kita bahas dulu Design Pattern itu apa.
Design pattern itu adalah pola-pola coding di OOP yang dapat digunakan lagi untuk kasus-kasus tertentu yang sudah didefinisikan.
Design pattern disini berawal dari design pattern yang dibuat oleh Gang of Four:
Erich Gamma
Richard Helm
John Vlissides
Ralph Johnson
Nah, design pattern ini selalu berkembang, tidak hanya design pattern yang ada di buku ini saja.
Pattern yang sangat terkenal dan banyak dipakai adalah:
- Singleton
- Abstract Factory
- Factory
- Builder
- Adapter (atau Adaptor)
- Bridge
- Command
- Facade
- Strategy
Di post berikutnya, ane akan bahas Singleton.
klo dari definisi berarti ga semua app yang kita buat bisa menerapkan pattern ya om??
dulu pernah belajar buat applikasi sederhana pake pattern pi ko jatuhnya saya ngerasa lebih ribet dan susah..? syarat umum app yang akan di buat akan lebih mudah jika menggunakan pattern itu apa ya om...
Pattern: SINGLETON.
Semantic: hanya ada satu instance/object yang boleh aktif. inisiasi object lain akan dicegat jika sudah ada satu object yang aktif.
/// <summary>
/// MainApp startup class for Structural
/// Singleton Design Pattern.
/// </summary>
class MainApp
{
/// <summary>
/// Entry point into console application.
/// </summary>
static void Main()
{
// Constructor is protected -- cannot use new
Singleton s1 = Singleton.Instance();
Singleton s2 = Singleton.Instance();
// Test for same instance
if (s1 == s2)
{
Console.WriteLine("Objects are the same instance");
}
// Wait for user
Console.ReadKey();
}
}
/// <summary>
/// The 'Singleton' class
/// </summary>
class Singleton
{
private static Singleton _instance;
// Constructor is 'protected'
protected Singleton()
{
}
public static Singleton Instance()
{
// Uses lazy initialization.
// Note: this is not thread safe.
if (_instance == null)
{
_instance = new Singleton();
}
Original Posted By 0neD►
klo dari definisi berarti ga semua app yang kita buat bisa menerapkan pattern ya om??
dulu pernah belajar buat applikasi sederhana pake pattern pi ko jatuhnya saya ngerasa lebih ribet dan susah..? syarat umum app yang akan di buat akan lebih mudah jika menggunakan pattern itu apa ya om...
sekian pertayaan newbie ini.
kalo menurut ane pattern dibuat untuk scalability..
ane kalo buat aplikasi kecil kayak test tool, jarang pake pattern..
logika sederhananya kalo gw mau bikin gambar pemandangan plus gambar pohon2 nya secara detail pasti bikin sketsa nya dulu, disiapin jenis2 kuasnya, etc etc..
tapi kalo gw cuma mau bikin gambar kotak doang gak perlu dibikin seribet itu..
Maksud:
- Mendefinisikan suatu instance untuk membuat object baru tetapi membiarkan/membebaskan class turunannya untuk memutuskan class mana yang akan dipakai untuk membangun object yang complex ini.
- Pemanggilan memakai abstract class/interface
Motifasi: Suatu aplikasi membutuhkan suatu mekanisme untuk membuat object yang lebih kompleks tetapi independen dari object-object yang menjadi bagian untuk pembuatan object kompleks tersebut.
Diagram UML:
Contoh code: (pake Java)
Kode ini berisi builder untuk membuat object Document sebagai Director-nya dan TextConverter sebagai Builder-nya.
Code:
//Abstract Builder
class abstract class TextConverter{
abstract void convertCharacter(char c);
abstract void convertParagraph();
}
// Product
class ASCIIText{
public void append(char c){ //Implement the code here }
}
//Concrete Builder
class ASCIIConverter extends TextConverter{
ASCIIText asciiTextObj;//resulting product
/*converts a character to target representation and appends to the resulting*/
object void convertCharacter(char c){
char asciiChar = new Character(c).charValue();
//gets the ascii character
asciiTextObj.append(asciiChar);
}
void convertParagraph(){}
ASCIIText getResult(){
return asciiTextObj;
}
}
//This class abstracts the document object
class Document{
static int value;
char token;
public char getNextToken(){
//Get the next token
return token;
}
}
//Director
class RTFReader{
private static final char EOF='0'; //Delimitor for End of File
final char CHAR='c';
final char PARA='p';
char t;
TextConverter builder;
RTFReader(TextConverter obj){
builder=obj;
}
void parseRTF(Document doc){
while ((t=doc.getNextToken())!= EOF){
switch (t){
case CHAR: builder.convertCharacter(t);
case PARA: builder.convertParagraph();
}
}
}
}
//Client
public class Client{
void createASCIIText(Document doc){
ASCIIConverter asciiBuilder = new ASCIIConverter();
RTFReader rtfReader = new RTFReader(asciiBuilder);
rtfReader.parseRTF(doc);
ASCIIText asciiText = asciiBuilder.getResult();
}
public static void main(String args[]){
Client client=new Client();
Document doc=new Document();
client.createASCIIText(doc);
system.out.println("This is an example of Builder Pattern");
}
}
Contoh lainnya seperti StringBuilder di .NET dan StringBilder di Java. Walaupun tidak ada interface untuk builder, tapi prinsipnya sama.
//ConcreteCommand Class.
class BuyStockOrder implements Order {
private StockTrade stock;
public BuyStockOrder ( StockTrade st) {
stock = st;
}
public void execute( ) {
stock . buy( );
}
}
//ConcreteCommand Class.
class SellStockOrder implements Order {
private StockTrade stock;
public SellStockOrder ( StockTrade st) {
stock = st;
}
public void execute( ) {
stock . sell( );
}
}
// Client
public class Client {
public static void main(String[] args) {
StockTrade stock = new StockTrade();
BuyStockOrder bsc = new BuyStockOrder (stock);
SellStockOrder ssc = new SellStockOrder (stock);
Agent agent = new Agent();
Original Posted By 0neD►
klo dari definisi berarti ga semua app yang kita buat bisa menerapkan pattern ya om??
dulu pernah belajar buat applikasi sederhana pake pattern pi ko jatuhnya saya ngerasa lebih ribet dan susah..? syarat umum app yang akan di buat akan lebih mudah jika menggunakan pattern itu apa ya om...
sekian pertayaan newbie ini.
Lebih susah dan ribet? Pattern tidak dibuat untuk menyusahkan programmer.
Pattern dibuat untuk memudahkan, tinggal memakai pattern yang ada untuk kasus tertentu sesuai kebutuhan.
Kalau gak butuh ya tidak usah dipakai.
Tapi kalo agan pake sesuai kebutuhan, jelas akan meningkatkan produktivitas! Gitu aja, gan.
Lebih susah dan ribet? Pattern tidak dibuat untuk menyusahkan programmer.
Pattern dibuat untuk memudahkan, tinggal memakai pattern yang ada untuk kasus tertentu sesuai kebutuhan.
Kalau gak butuh ya tidak usah dipakai.
Tapi kalo agan pake sesuai kebutuhan, jelas akan meningkatkan produktivitas! Gitu aja, gan.
Setuju, kadang-kadang itu jg jadi challenge sendiri untuk membuat sesuatu yang overly complicated.
Maksud:
- Convert the interface suatu class menjadi interface yang diharapkan user
Motifasi: Pattern adapter adalah beradaptasi antara class, interface dan object. Seperti adapter di dunia nyata digunakan sebagai interface. Contoh: adapter untuk berbagai power supply, camera, dsb.
Di dalam dunia software development juga sama. Contoh kasus adalah kita mempunyai class yang mengharapkan suatu object dengan fitur yang sama tapi memiliki interface yang berbeda.
Diagram UML:
Partisipan:
- Target - interface yang digunakan client.
- Adapter - beradaptasidengan interface Adaptee ke interface Target
- Adaptee - mendefiniskan interface yang membutuhkan adaptasi.
- Client - berkolaborasi dengan object agar sesuai dengan interface Target
Maksud: Facade itu intinya menyediakan suatu interface yang terpadu, yang didalamnya terdapat subsystem yang berbeda-beda.
Contoh: di aplikasi Loan Approval ada facade untuk memadukan library depresiasi, akumulatif, balloon payment, back to back payment, mized float payment.
Sebut saja Facade ini adalah LoanCalculator. Nantinya loan calculator ini berisi class-class internal yang dipanggil lewat LoanCalculator.
Motifasi: penyederhanaan suatu sistem menjadi subsistem-subsistem yang berhubungan tapi tetap bisa digunakan secara modular dan tidak bisa diakses dari luar sistem. Lihat contoh diatas.
Anda akan meninggalkan Programmer Forum. Apakah anda yakin?
Lapor Hansip
Semua laporan yang masuk akan kami proses dalam 1-7 hari kerja. Kami mencatat IP pelapor untuk alasan keamanan. Barang siapa memberikan laporan palsu akan dikenakan sanksi banned.