Java Kodunuzun Nesne-Merkezli Olmadığının 10 İşareti – XI: Sıra dışı durumları ifade etmek için Exception nesneleri oluşturmamak.

Geliştirdiğimiz Java kodunun nesne-merkezli olmadığının 10 işaretinin neler olduğunu bu yazıda listelemiş ve ilk dokuz maddeyi daha önce ele almıştık. Şimdi de onuncu ve son maddeyi inceleyelim:

Sıra dışı durumları ifade etmek için Exception nesneleri oluşturmamak. (No Exception objects to represent exceptional situations.)

Nesne-merkezli programların en temel özelliği, her şeyi nesne olarak ifade etmektir. Eğer derdimiz her şeyi nesnelerle ifade etmek ise, sıra dışı durumları da nesneler ile  göstermeliyiz. Zaten sıra dışı durumlar iş mantığının bir parçasıdır, dolayısıyla iş modelimizi sıra dışı durumlara özgü nesnelerle zenginleştirmeliyiz. Sıra dışı durumları görmezden gelmek ya da int ya da String vb. tiplerle, return değeri olarak ifade etmek nesneden uzaklaşmaktır, hem anlam problemine yol açar hem de daha karmaşık koda sebebiyet verir. Nesne yerine int ya da String vb. tipler kullandığınızda bu değerlerin bir envanterini yapmanız ve herkesin bu envanteri sıklıkla kullanması gereklidir. Bu da enerji kaybıdır ve hataya da yakındır. Öte taraftan böyle bir durumda bu değerleri metotlarınızdan döndürmek ve kodunuzun içinde dolaştırmak yine sizin sorumluluğunuzda olacaktır.

Dil olarak Java kullandığımızda, sıra dışı durumları da java.lang.Exception sınıfının nesneleri olarak kurgulamalıyız. Yeterliyse kullandığımız APIlerdekiException sınıfının ya da alt sınıflarının nesneleriyle, değilse kendi yaratacağımız Exception nesneleriyle, iş mantığındaki sıra dışı durumları yakalayıp, sistemin çalışmasının devam etmesini sağlamalı ve kullanıcıya bilgi verme, loglama vb. ihtiyaçları gidermeliyiz.

Fırlattığınız sıra dışı durum nesneleri, metotların arayüzlerinin yani anlamlarının bir parçasıdır, dolayısıyla, sıra dışı durumları kodlamadan önce yani tasarım sırasında ortaya koymalıyız. Açıkçası analistler tarafından iş ve ihtiyaç analizi sırasında, süreçlerdeki normal akışlardan sapmalar olarak yakalanmayan alternatif ve sıra dışı durumların, tasarım sırasında gündeme gelmesi mümkünse de aslolan bu durumların analizde belirlenip, süreçlerin bir parçası olarak ifade edilmesidir. Aksi taktirde eksik ve kullanışsız yazılımlar üretmek kaçınılmazdır. Bu konuda daha önce yazdığım ve kendi tecrübeme dayanan duruma bakabilirsiniz.  

Modern dillerdeki sıra dışı durum mekanizmaları, bu durumların nesne olarak ifade edilmesi yanında, çalışma zamanında böyle bir durum oluştuğunda fırlatılan sıra dışı durum nesnesinin çalışma ortamında uygun bir kod parçası (handler) tarafından yakalanmasını da sağlarlar. Diller bu amaçla kendi içlerinde bir yükseltme (escalation) mekanizmasına sahiptirler. Bu noktada önemli olan yazılım projesinde bu durumların taa analizden itibaren ıskalanmamasıdır.

Bu amaçla aşağıdaki gibi kod yerine

public interface UserDao{

	public User getUser(String tckn) throw Exception;

	public User saveUser(User user) throw Exception;
	
}

böyle bir kodu tercih etmeliyiz:

public interface UserDao{

 public User getUser(String tckn) throw NoSuchUserException;
 public User saveUser(User user) throw DuplicatedUserException;
	
}

Sıra dışı durumları, analistiniz ıskalarsa siz tasarım sırasında, orada da ıskalanırsa, kodlarken bulun ve sorun olarak ortaya koyun.

Toplam görüntülenme sayısı: 996