Programımın bir kısmı, veritabanımdaki birçok tablo ve sütundaki verileri işlenmek üzere alıyor. Sütunlardan bazıları olabilir null
, ancak geçerli işleme bağlamında bu bir hatadır.
Bu "teorik olarak" olmamalıdır, bu yüzden eğer kötü veriler veya koddaki bir hataya işaret eder. Hangi alanın olduğuna bağlı olarak hataların farklı önem dereceleri vardır null
; yani bazı alanlar için işlem durdurulmalı ve birileri bilgilendirilmeli, bazıları için işlemenin devam etmesine ve birisini bilgilendirmesine izin verilmelidir.
Nadir fakat olası null
girişleri ele alacak iyi bir mimari veya tasarım ilkesi var mı?
Çözümlerin Java ile uygulanması mümkün olmalı, ancak etiketi kullanmadım çünkü sorunun biraz dil bilincine sahip olmadığını düşünüyorum.
Kendime sahip olduğum bazı düşünceler:
NOT NULL kullanma
En kolay veritabanında NOT NULL kısıtlaması kullanmak olacaktır.
Peki ya verilerin orijinal olarak eklenmesi bu sonraki işlem adımından daha önemli ise? Bu yüzden eklenti null
tabloya bir hata koyarsa (hatalar veya belki de geçerli bir sebepten dolayı), ekin başarısız olmasını istemem. Programın daha birçok bölümünün eklenen verilere bağlı olduğunu ancak bu sütuna bağlı olmadığını varsayalım. Bu nedenle, ekleme adımı yerine geçerli işlem adımında hata riskini tercih ederim. Bu yüzden NOT NULL kısıtlaması kullanmak istemiyorum.
Saf olarak NullPointerException özelliğine bağlı
Verileri her zaman orada olmasını beklediğim gibi kullanabilirim (ve bu gerçekten böyle olmalı) ve ortaya çıkan NPE'leri uygun bir seviyede yakalayabilirim (örneğin, mevcut girişin işlenmesi durur, ancak tüm işleme ilerlemesi değil) ). Bu "hızlı başarısız" ilkesi ve ben sık sık tercih ederim. En azından bir hata ise, kayıtlı bir NPE alırım.
Ama sonra çeşitli eksik veri türlerini ayırt etme yeteneğini kaybediyorum. Örneğin, bazı eksik veriler için veriyi dışarıda bırakabilirim, ancak diğerleri için işlem durdurulmalı ve bir yönetici bilgilendirilmelidir.
null
Her erişimden önce kontrol etme ve özel istisnalar atma
Özel istisnalar, istisnayı temel alarak doğru eyleme karar vermeme izin verecek, bu yüzden bu yol gibi görünüyor.
Ama bir yerde kontrol etmeyi unutursam ne olur? Ayrıca daha sonra asla veya nadiren beklenen null çekler ile kod dağınıklığı (ve kesinlikle iş mantık akışının bir parçası değil).
Bu şekilde gitmeyi seçersem, yaklaşım için hangi modeller en uygunudur?
Yaklaşımlarım ile ilgili her türlü düşünce ve yorumlarınızı bekliyoruz. Ayrıca her türlü daha iyi çözümler (kalıplar, ilkeler, kodumun daha iyi mimarisi veya modelleri vb.).
Düzenle:
Başka bir kısıtlama var, ben bir ORM DB kalıcılık nesnesine eşleme yapmak için kullanıyorum, bu nedenle bu düzeyde null kontrolleri yapmak işe yaramaz (null herhangi bir zarar vermediği yerlerde aynı nesneler kullanılır gibi) . Bunu ekledim çünkü şimdiye kadar verilen cevaplar bu seçenekten bahsetti.