alexa-tracking
Selamat Guest, Agan dapat mencoba tampilan baru KASKUS Masih Kangen Tampilan Sebelumnya
Kategori
Kategori
Home / FORUM / All / Tech / ... / Programmer Forum /
Konsep dasar Design Pattern, Design Framework dan arsitektur software
5 stars - based on 5 vote 5 stars 0 stars
1024
1024
KASKUS
51
244
https://www.kaskus.co.id/thread/520af84b3dcb173e27000010/konsep-dasar-design-pattern-design-framework-dan-arsitektur-software

Konsep dasar Design Pattern, Design Framework dan arsitektur software

Hola agan-agan semua emoticon-Smilie

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.

Sesuai dengan permintaan agan-agan di Lounge Programmer juga:
http://www.kaskus.co.id/show_post/52...24000000/3727/
http://www.kaskus.co.id/show_post/52...4a000001/3731/
http://www.kaskus.co.id/show_post/52...40000005/3743/

dan juga agan-agan lainnya.

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:


Nah, semoga agan-agan semua siap menjadi Enterprise Software Architect!
Diubah oleh erilive
Urutan Terlama
Halaman 1 dari 7
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.

Quote:

klo dari definisi berarti ga semua app yang kita buat bisa menerapkan pattern ya om??emoticon-Bingung (S)

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... emoticon-Bingung (S)

sekian pertayaan newbie ini. emoticon-Malu (S)
Pattern: SINGLETON.
Semantic: hanya ada satu instance/object yang boleh aktif. inisiasi object lain akan dicegat jika sudah ada satu object yang aktif.

Keterangan UML:
Konsep dasar Design Pattern, Design Framework dan arsitektur software

Contoh di C#:



Code:
using System;

namespace DoFactory.GangOfFour.Singleton.Structural
{

/// <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();
}

return _instance;
}
}
}


Untuk Java? Code diatas juga bisa diaplikasikan emoticon-Smilie
Reserved untuk Factory dan Abstract Factory
Quote:


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..

Pattern: BUILDER

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:
Konsep dasar Design Pattern, Design Framework dan arsitektur software

Contoh code: (pake Java)

Kode ini berisi builder untuk membuat object Document sebagai Director-nya dan TextConverter sebagai Builder-nya.

Konsep dasar Design Pattern, Design Framework dan arsitektur software

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.
Diubah oleh erilive
Pattern: COMMAND pattern.

Maksud: object yang berisikan perintah-perintah yang bersifat tindakan seperti Undo, Redo, Insert, Update, Delete.

Motifasi: Mengimplementasikan perintah-perintah dalam bentuk encapsulation, dan dapat dijalankan secara antrian berurutan.

Diagram UML:
Konsep dasar Design Pattern, Design Framework dan arsitektur software

Contoh implementasi diambil dari:
http://www.oodesign.com/command-pattern.html

Berikut ini adalah contoh Command, untuk membeli dan menjual saham.

Code:
public interface Order {
public abstract void execute ( );
}

// Receiver class.
class StockTrade {
public void buy() {
System.out.println("You want to buy stocks");
}
public void sell() {
System.out.println("You want to sell stocks ");
}
}

// Invoker.
class Agent {
private m_ordersQueue = new ArrayList();
public Agent() {
}

void placeOrder(Order order) {
ordersQueue.addLast(order);
order.execute(ordersQueue.getFirstAndRemove());
}
}

//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();

agent.placeOrder(bsc); // Buy Shares
agent.placeOrder(ssc); // Sell Shares
}
}


Contoh yang laen:
Kalo di .NET:
- di ADO.NET ada SqlCommand, DbCommand
- di WPF ada RoutedCommand, http://msdn.microsoft.com/en-us/libr...edcommand.aspx

Kalo di Java:
- di JDBC ada java.sql.Statement, http://docs.oracle.com/javase/7/docs...Statement.html



Diubah oleh erilive

Nice thread

Wah nice gan, bisa bantu sesama programmer memahami konsep.

Kalo bisa sekalian use case yang mungkin digunain gan.

emoticon-Shakehand2emoticon-Shakehand2emoticon-Shakehand2
Quote:


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. emoticon-Smilie
trit baru emoticon-Selamat
semoga bisa jd tempat sharing yg hangat ya emoticon-shakehand
btw pejwan emoticon-Cool
numpang liwat emoticon-Ngacir
Diubah oleh uciica

How to design a good API and why it matters

Quote:


Setuju, kadang-kadang itu jg jadi challenge sendiri untuk membuat sesuatu yang overly complicated.

emoticon-Ngakak
PATTERN: ADAPTER

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:
Konsep dasar Design Pattern, Design Framework dan arsitektur software
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

Contoh:

Code:
namespace DoFactory.GangOfFour.Adapter.RealWorld
{

/// <summary>MainApp startup class for Real-World Adapter Design Pattern.</summary>
class MainApp
{

/// <summary>
/// Entry point into console application.
/// </summary>
static void Main()
{
// Non-adapted chemical compound
Compound unknown = new Compound("Unknown");
unknown.Display();

// Adapted chemical compounds
Compound water = new RichCompound("Water");
water.Display();

Compound benzene = new RichCompound("Benzene");
benzene.Display();

Compound ethanol = new RichCompound("Ethanol");
ethanol.Display();

// Wait for user
Console.ReadKey();

}
}

/// <summary>
/// The 'Target' class.</summary>
class Compound
{

protected string _chemical;
protected float _boilingPoint;
protected float _meltingPoint;
protected double _molecularWeight;
protected string _molecularFormula;

// Constructor
public Compound(string chemical)
{
this._chemical = chemical;
}

public virtual void Display()
{
Console.WriteLine("\nCompound: {0} ------ ", _chemical);
}
}


/// <summary>The 'Adapter' class</summary>
class RichCompound : Compound
{

private ChemicalDatabank _bank;

// Constructor
public RichCompound(string name)
: base(name)
{

}

public override void Display()
{

// The Adaptee
_bank = new ChemicalDatabank();
_boilingPoint = _bank.GetCriticalPoint(_chemical, "B");
_meltingPoint = _bank.GetCriticalPoint(_chemical, "M");
_molecularWeight = _bank.GetMolecularWeight(_chemical);
_molecularFormula = _bank.GetMolecularStructure(_chemical);

base.Display();
Console.WriteLine(" Formula: {0}", _molecularFormula);
Console.WriteLine(" Weight : {0}", _molecularWeight);
Console.WriteLine(" Melting Pt: {0}", _meltingPoint);
Console.WriteLine(" Boiling Pt: {0}", _boilingPoint);
}

}

/// <summary>The 'Adaptee' class.</summary>
class ChemicalDatabank
{

// The databank 'legacy API'
public float GetCriticalPoint(string compound, string point)
{

// Melting Point
if (point == "M")
{

switch (compound.ToLower())
{

case "water": return 0.0f;
case "benzene": return 5.5f;
case "ethanol": return -114.1f;
default: return 0f;
}
}

// Boiling Point

else
{

switch (compound.ToLower())
{

case "water": return 100.0f;
case "benzene": return 80.1f;
case "ethanol": return 78.3f;
default: return 0f;
}
}
}

public string GetMolecularStructure(string compound)
{
switch (compound.ToLower())
{
case "water": return "H20";
case "benzene": return "C6H6";
case "ethanol": return "C2H5OH";
default: return "";
}
}

public double GetMolecularWeight(string compound)
{
switch (compound.ToLower())
{
case "water": return 18.015;
case "benzene": return 78.1134;
case "ethanol": return 46.0688;
default: return 0d;
}
}
}
}


Sebaiknya Adapter tidak dikacaukan dengan Factory, karena TUJUAN pernggunaan berbeda!
Diubah oleh erilive

PATTERN: FACADE

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.

Diagram UML:

Konsep dasar Design Pattern, Design Framework dan arsitektur software

Contoh sederhana:
(diambil dari http://www.dofactory.com/Patterns/Pa...de.aspx#_self1 dan disesuaikan)

Code:

namespace DoFactory.GangOfFour.Facade.Structural
{

/// <summary>
/// MainApp startup class for Structural
/// Facade Design Pattern.
/// </summary>
class MainApp
{

/// <summary>
/// Entry point into console application.
/// </summary>
public static void Main()
{

Facade facade = new Facade();

facade.MethodA();

facade.MethodB();

// Wait for user
Console.ReadKey();
}
}

/// <summary>
/// The 'Subsystem ClassA' class
/// </summary>
class SubSystemOne
{

public void MethodOne()
{
Console.WriteLine(" SubSystemOne Method");
}
}

/// <summary>
/// The 'Subsystem ClassB' class
/// </summary>
class SubSystemTwo
{

public void MethodTwo()
{
Console.WriteLine(" SubSystemTwo Method");
}
}

/// <summary>
/// The 'Subsystem ClassC' class
/// </summary>
class SubSystemThree
{

public void MethodThree()
{
Console.WriteLine(" SubSystemThree Method");
}
}

/// <summary>
/// The 'Subsystem ClassD' class
/// </summary>
class SubSystemFour
{
public void MethodFour()
{
Console.WriteLine(" SubSystemFour Method");
}
}

/// <summary>
/// The 'Facade' class
/// </summary>
class Facade
{

private SubSystemOne _one;
private SubSystemTwo _two;
private SubSystemThree _three;
private SubSystemFour _four;

public Facade()
{
_one = new SubSystemOne();
_two = new SubSystemTwo();
_three = new SubSystemThree();
_four = new SubSystemFour();
}

public void MethodA()
{
Console.WriteLine("\nMethodA() ---- ");
_one.MethodOne();
_two.MethodTwo();
_four.MethodFour();
}

public void MethodB()
{
Console.WriteLine("\nMethodB() ---- ");
_two.MethodTwo();
_three.MethodThree();

}
}
}



Diubah oleh erilive
absen di halaman pertama dulu ah
Reserved for Strategy pattern part one
Reserved for strategy pattern, part two
reserved for update
reserved for update
akhirnya jadi juga threadnya om eri emoticon-Big Grin

ada banyak ya emoticon-Hammer

selama ini cuma makek yang singleton emoticon-Embarrassment
Halaman 1 dari 7


×
GDP Network
Copyright © 2018, Kaskus Networks, PT Darta Media Indonesia.
Ikuti KASKUS di