Tuesday, September 06, 2005

Some J2EE Development Best Practices

Seorang teman meminta saya untuk menulis apa yang saya tahu tentang J2EE dan best practices-nya. Beberapa hal yang tertulis di sini mungkin sudah terlalu umum dan kurang mendalam. Di waktu yang lain (jika ada), saya akan mencoba memaparkannya secara lebih jelas. Sebelum membaca tulisan ini, ada baiknya untuk membaca terlebih dahulu No Best Practices.

General development best practices

Common OO development phases :
  1. Requirement collecting and analysis
  2. Object oriented analysis
  3. Architectural design
  4. Object oriented design
  5. Evaluation
  6. Coding, testing, redesign cycle

Masing-masing metodologi mempunyai kekurangan dan kelebihannya masing-masing. Jika kita tidak wajib secara ketat untuk menggunakan suatu metodologi tertentu, pilihlah bagian-bagian tertentu dari suatu metodologi yang dianggap paling menguntungkan (manfaat vs effort). Sebagai contoh, kita bisa mengambil pendekatan TDD (Test Driven Development) pada saat siklus coding, testing, redesign.

Pada fase architectural design, developer akan dihadapkan pada permasalahan pemilihan teknologi. Banyak developer yang memilih teknologi berdasarkan popularitas atau tantangannya (misalnya Struts, EJB, Hibernate), bukan berdasarkan kebutuhannya. Pilihlah teknologi yang tepat untuk permasalahan yang ada. CV itu penting, tapi keberhasilan proyek (tepat waktu dan tepat budget) lebih penting lagi.

Bahan pertimbangan pemilihan arsitektur :

  1. Sistem yang sudah ada / existing system
  2. Network bandwidth
  3. Budget
  4. Kemampuan developer
  5. Kebutuhan non fungsional aplikasi (performance, scalability, availability, security, maintainability)
  6. Kebutuhan fungsional aplikasi

Development artefact (use case diagrams, class diagrams, interaction diagrams, dll yang dihasilkan selama development) hanya akan berguna jika artefact tersebut dapat digunakan sebagai alat komunikasi antar developer dan sinkron dengan kode yang dibuat. Jika kita tidak dapat menjaga kesesuaian antara diagram dan kode kita, sebaiknya buang saja diagram-diagram tersebut, karena selain kita sudah punya artefact paling penting (yaitu kode), diagram-diagram tersebut hanya akan menjadi beban tambahan saja (tidak mempunyai nilai tambah).

Rilislah software / protoptype (software dengan beberapa fitur yang sudah terimplementasi) secepat mungkin agar dapat sesegera mungkin mendapatkan feedback dari client. Semakin cepat feedback didapat, semakin cepat pula siklus code, test, dan redesign kita berputar.

Salah satu faktor yang menyebabkan cepatnya pengembangan software secara open source adalah cepatnya open issues (feedback dan feature request) diberikan oleh pengguna dan kontributor.

Design level

Common practices :

  1. Favor object composition over class inheritance
  2. Don’t overuse design pattern. Design pattern is something that naturally come to our mind, not forced. Jangan pakai design pattern hanya supaya desain aplikasi kita terlihat cantik, karena memakai bermacam-macam design pattern.

Good architects keep the design simple, by removing everything until there is nothing left to remove. Make simple, but not simpler (Einstein).

Technology driven vs problem driven :

Beberapa developer J2EE pada saat perancangan terkadang terpaku pada teknologi yang akan dipakai. Sebagai contoh pada saat kita sudah memilih EJB sebagai teknologi yang akan kita pakai, kita akan cenderung menyesuaikan desain OO kita supaya menuruti best practice yang dianjurkan. Misalnya dengan mengacu Sun’s Core J2EE Patterns, kita akan merancang model kita sebagai Composite Entity (minimizing JDBC call and container’s efforts to persist/load EJB’s state) dan menyertakan juga Transfer / Value Object (minimizing remote method call traffic). Hasilnya adalah desain yang rumit dan tightly coupled dengan EJB. Jika pada sebelumnya requirement awal kita tidak membutuhkan aplikasi kita untuk terdistribusi, sekarang muncul requirement baru yang diakibatkan karena kita menggunakan EJB.

Contoh kasus lain adalah pada saat mendesain persistent object. Jangan hanya karena kita menggunakan teknologi persistensi yang mewajibkan object kita mempunyai getter/setter, kita jadi menambahkan method-method tersebut pada object kita (yang sebenarnya pada requirement awal tidak dibutuhkan getter/setter method tersebut). Ilustrasinya diberikan sebagai berikut :

Hasil analisis dari requirement :


1 public class Account { // immutable
2 private double interest; // Att1
3 private int numberOfMonthSinceRegistered; // Att2
4 private BigDecimal balance; // Att3
5 public Account(...){
6 ... // initialization
7 }
8 public BigDecimal getBalance(){
9 // formulation using att1, att2, and balance
10 BigDecimal returnedBalance = ...
11 return returnedBalance;
12 }
13 }

Att1, Att2, dan Att3 adalah attribute yang mewakili state dari Account, sehingga ketiganya merupakan persistent attributes. Hasil analisis menyebutkan bahwa Att1 dan Att2 tidak dapat diubah (aturan 1) dan dibaca (aturan 2) dari manapun di luar Account, dan Att3 hanya bisa dibaca saja (aturan 3).

Karena menggunakan suatu teknologi ORM yang mewajibkan kita menyediakan getter/setter untuk semua persistent attributes, kita harus menambahkan method-method berikut :


1 public class Account { // should be immutable class
2 ... // same code
3 getter and setter for interest
4 getter and setter for numberOfMonthSinceRegistered
5 setter for balance
6 }


Karena terpaksa menuruti kontrak yang diwajibkan teknologi ORM yang kita gunakan, kita terpaksa harus melanggar 3 aturan yang sudah ditetapkan sebelumnya.

(Catatan : kasus di atas hanya contoh saja. Beberapa ORM tools yang populer tidak memerlukan kita melengkapi seluruh persistent atttibutes dari kelas kita dengan getter/setter-nya. Tool-tool tersebut bisa membaca dan mengubah nilai attribute dengan cara lain, misalnya bytecode enhancement, dynamic proxy, AOP, cglib, dll)

Jangan biarkan teknologi yang mengarahkan bagaimana kita merancang solusi kita.

Code level

Common practice :

  1. Program to interface, not implementation (achieving loose coupling)
  2. Test, refactor, test, refactor, test, dan refactor.
  3. Remove code duplication.

Write “self documented” code dengan menggunakan nama class, attribute, dan method yang tepat (selain komentar dalam bentuk javadoc yang baik). Kode yang baik adalah kode yang benar logika (dapat menyelesaikan masalah), sintaks (lolos compile), dan semantiknya (readable and easy to maintain). Every programmer can write code that undestood by computer, but good programmer wrote code that understood by human.

permaLink() | postComments() | read9Comments()

This blog is awesome! If you get a chance you may want to visit this weather downloads site, it's pretty awesome too!

By Blogger tweedledeetweedledum, at 10:54 AM  

Hey..I found a site that lets you download unlimited MP3s for free. You can save music and movies to your PC. Check it out. download free sheet music

By Blogger GS, at 3:25 AM  

I came across you blog and thought you may find this site usefull. It has gas saving tips and where to find cheap gas. limewire download

:)

By Anonymous Anonymous, at 7:01 AM  

You have a very nice blog. I thought I would share this with you, free mp3 music downloading

By Blogger Steve Westphal, at 2:35 PM  

Blognya sangat informatif.
Salam,
Santy - IdeBaru.com

By Blogger cupcake, at 8:57 PM  

Nice blog i have a site about free music video codes maye you can find some great music video codes to add to your website!

By Blogger Raven, at 3:21 PM  

Thank you!
[url=http://gszxexcq.com/zodc/bxin.html]My homepage[/url] | [url=http://esdyjfbe.com/falh/clgf.html]Cool site[/url]

By Anonymous Anonymous, at 7:56 AM  

Thank you!
My homepage | Please visit

By Anonymous Anonymous, at 7:56 AM  

Thank you!
http://gszxexcq.com/zodc/bxin.html | http://wtzoubgj.com/pebj/tjxo.html

By Anonymous Anonymous, at 7:57 AM  

Thursday, September 01, 2005

Friend, fate, hope. Innalillahi Wa Inna Ilayhi Raaji'uun.

monang_ok : jangan la congrats dulu
monang_ok : lom 100% la
Dy : hehe
monang_ok : kalau mati pagi ni, tak kan jadi pergi hehe
Dy : bila boleh congrats
monang_ok : hehe tak perlu la
monang_ok : nothing big
Dy : hehe jgnlah ckp macam tu
monang_ok : hehe, sorry
Dy : so looking for american girl ke
monang_ok : american girls like to be treated as a computer ke?
monang_ok : hehe
Dy : maybe
monang_ok : hehe
monang_ok : and how bout u?
Dy : me?
monang_ok : do u plan to going back to malaysia after got ur degree?
Dy : stuck in ireland for 2-3 yrs
monang_ok : plan untuk nanti la
monang_ok : hehe, not now
Dy : insyaallah
monang_ok : oh great
Dy : i want to serve to my country
monang_ok : wow cool
Dy : pray for my success
monang_ok : eh
monang_ok : i remember
monang_ok : when i read a manga (comic)
Dy : yup
monang_ok : it says something about 'doctor without border' or somthin like that
monang_ok : in europe
monang_ok : is it for real?
monang_ok : volunteering organization
Dy : real
Dy : y
monang_ok : oh
monang_ok : just curious
monang_ok : cool
monang_ok : haha
monang_ok : don't be so cocky
monang_ok : u even not been there yet hehe
monang_ok : hehe
Dy : ok monn i got to go, c ya next time ok

See u later Dy.

Allah's ideal ways may be different from ours. You haven't been a doctor yet. You haven't served your country yet. You haven't been Mrs. Ariff yet. But may be, it's His best for us.

We might never meet in this real world, but sure it's great to have a good friend like her. Hope you'll be in the best place after Him.

Al Fatihah.

permaLink() | postComments() | read4Comments()

Good design!
[url=http://dzlghwlg.com/miao/tnan.html]My homepage[/url] | [url=http://sbjadnzx.com/uhlt/jjzq.html]Cool site[/url]

By Anonymous Anonymous, at 7:57 AM  

Great work!
My homepage | Please visit

By Anonymous Anonymous, at 7:57 AM  

Great work!
http://dzlghwlg.com/miao/tnan.html | http://yethjzvw.com/zbom/mnxl.html

By Anonymous Anonymous, at 7:58 AM  

HEY ALL Take A LOOK!
Amateur Sex http://groups.google.com/group/amateur-sex-online/
oral sex http://groups.google.com/group/oral-sex-online/
lesbians sex http://groups.google.com/group/lesbians-sex/
sexy babes http://groups.google.com/group/sexy-babes-free/
asian porn http://groups.google.com/group/asian-porn-online/
asian sex http://groups.google.com/group/asian-sex-online/
teen sex http://groups.google.com/group/teen-sex-free/
ALOHHA!

By Anonymous Gladis oscar, at 12:09 AM  

Cat Stevens said

- If you want to sing out, sing out, and if you want to be free, be free, cause there's a million ways to be, you know that there are. -

watashi

My Photo
Name: Monang Setyawan
Location: Jakarta, Indonesia

I'm nothing

likes...

anime, games, Java, watching movies, operating illegal software and music downloads, playing the guitar, reading, football, cats

dislikes...

pineapples, snakes, Bush, Bill Gates, hypocrites

valuable primates

MartinFowler JamesGosling RickardOberg GradyBooch JasonHunter SteveJobs CedricBeust BruceTate HaniSulaiman DionAlmaer BruceEckel CarlosWhoever CameronPurdy GrahamGlass BillBurke GavinKing MarcFleury RichardStallman JamesStrachan ErikHatcher CraigMcClanahan MonsonHaefel GuidoVanRossum JimWaldo Joel Spolsky JackShirazi EricRaymond HeinzKabutz

archives

10/2004
11/2004
01/2005
02/2005
03/2005
04/2005
07/2005
09/2005
11/2005
12/2005
01/2006
02/2006
01/2007
09/2007
10/2007
12/2007

other people

Mr. Good Indonesian
We Hate Indonesia
Zul van Delft

donation provided by

Java-Tips

links

My Wiki
TSS
/.

behind the scene

I like grey because it reminds me of the colour of my brain. My brain conjures up funny or useless thoughts to be ranted in this blog/journal.

Let them speak



This horrible page has been visited for times

theWrittenOne
-Yet Another Useless Blog- Random thought, Java, and anything