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.

Yazının Devamı...

Perşembe, Mayıs 15, 2008

Uykuya dalis

Web günceme daha önce yazmadım. O yüzden şimdi duyurayım: 5 hafta kadar önce (7 Nisanda) çocuğumuz doğdu. Adını Özgür Emin koyduk, fakat hala nüfusta kaydını yaptırmadık. Aslında bu web sayfasını daha çok teknik konularla ilgili doldurmak istiyordum. Kişisel anılarımı başka bir yere koysam belki daha uygun olur diye düşünüyordum, fakat ne yapacağıma dair tam da bir karara varamadım.

Birden çok web güncesi olunca, hepsinin bakımı ayrı bir güçlük olacak. Zaten birden çok web güncem var, fakat bazılarının adreslerini ben bile bilmiyorum. Bu arada bu web güncemin adresinden de çok memnun değilim, değiştirmeyi planlıyorum.
Neyse, ana konumuza dönelim. Ne kadar gevezelik yapıyorum :)
Tontişimizin (bebekten bahsediyorum) en ilginç yönlerinden biri uyuyakalma şekli. Uyutmak için, kucağıma alıp, salonda defalarca tur atıyorum. Gezmeye başlarken gözleri faltaşı gibi açıkken, birkaç turun ardından göz kapakları yarıya iniyor. Bir iki tur daha attım mı, gözlerini zorlukla açık tutabiliyor. Sonra kendisi farkına bile varmadan, uyku alemine giriyor.

Yazının Devamı...

Cumartesi, Mayıs 03, 2008

qipit ile doküman taramak

Qipit.com adlı bir site var. Dokümanları kolayca okunabilir bir şekilde taramak için çok yararlı bir uygulama. Cep telefonunuzla veya dijital fotoğraf makinenizle çektiğiniz resimleri qipit'e yüklüyorsunuz. Normalde çektiğiniz resimlerde, çok sayıda karanlık alan oluyor. Qipit size otomatik olarak, doküman resimlerinin temiz bir şekilde düzenlenmiş halini geri gönderiyor.

Yazının Devamı...