Pazartesi, Mayıs 19, 2008

Asla String kullanmayin

Stephan Schmidt Never, never, never use String in Java (or at least less often :-) makalesinde, String gibi primitifleri kullanmak yerine alternatif bir çözüm öneriyor. Yaklaşımının temelinde DDD (domain driven design) yani alan temelli tasarım yatıyor. Temel fikir şu: Alana (veya domain/business) ait kavramların nesnelerle temsil edilmesi, en küçük alan kavramından başlamalı. Bir kişinin ismi dahi kendi adına bir nesne olmalı.

Makaleden aldığım notlar burada:

String gibi primitifler kullanmayın

eski yol:


public void bookTicket(
String name,
String firstName,
String film,
int count,
String cinema);


yeni yol:


public void bookTicket(
Name name,
FirstName firstName,
Film film,
Count count,
Cinema cinema);


faydaları:
çok uzun parametre listesi alan metotlar kendi kendini dokümente ederler
iş mantığının yönetimi daha kolay olur


new Name("ahmet")
şeklinde yazmak işi zorlaştırmaz mı?
çözüm:

public static Name name(String name) {
return new Name(name);
}


böylece:

new Customer(firstName("Stephan"), name("Schmidt"));


eski yol:

new Customer("Stephan", "Schmidt");


başka örnek:

new Point(10,10);

yeni yol:

new Point(x(10), y(10));

XPos ve YPos objeleri kullanılıyor

örnek:
fiyatla arama yapmak:
searchByPrice
bu metodun argümanları nasıl olmalı?

kötü yol:

Vector searchByPrice(double start, double end)


iyi:

List searchByPriceRange(Price start, Price end)


veya

List searchByPriceRange(PriceRange priceToSearch)



---
Tartışma:

İtirazlar:
1. YAGNI ilkesi ihlal edilmiş olmuyor mu?

Cevaplar:
Oliver:
http://stephan.reposita.org/archives/2008/05/02/never-never-never-use-string-in-java-or-at-least-less-often/#comment-87153
But we actually had a problem with the last names on the project I am currently on. The business wanted to limit the last name length to minimum 2 characters, and of course, the code was littered with length checking, from the ui level to the database.

A couple of months later, they dropped that requirement, and it took us ages to find all the checking throughout the code and remove it.

The original blog post argued that domain modeling needs to occur at the lowest possible level. At some point, every project, starts introducing domain model.

Hiç yorum yok: