eriliveAvatar border
TS
erilive
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 14-08-2013 04:54
nona212
nona212 memberi reputasi
1
21.3K
124
GuestAvatar border
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Mari bergabung, dapatkan informasi dan teman baru!
Programmer Forum
Programmer ForumKASKUS Official
20.2KThread4.2KAnggota
Tampilkan semua post
eriliveAvatar border
TS
erilive
#13
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:

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 16-08-2013 02:36
froxst
froxst memberi reputasi
1
Ikuti KASKUS di
© 2023 KASKUS, PT Darta Media Indonesia. All rights reserved.