true
Başarısızlık yapmazsanız başarıya geri dönmek için kesinlikle hiçbir neden yoktur false
. Müşteri kodu neye benzemeli?
if (result = tryMyAPICall()) {
// business logic
}
else {
// this will *never* happen anyways
}
Bu durumda, arayan kişi zaten bir try-catch bloğuna ihtiyaç duyar, ancak daha sonra daha iyi yazabilir:
try {
result = tryMyAPICall();
// business logic
// will only reach this line when no exception
// no reason to use an if-condition
} catch (SomeException se) { }
Bu yüzden true
geri dönüş değeri arayan için tamamen önemli değil. Öyleyse sadece yöntemi koru void
.
Genel olarak, arıza modları tasarlamak için üç yol vardır.
- Doğru / yanlış döndür
- Kullan
void
, at (işaretli) istisna
- ara sonuç nesnesini döndür.
İade true
/false
Bu, bazı eski, çoğunlukla c tarzı API'lerde kullanılır. Dezavantajları obviuos, neyin yanlış gittiğini bilmiyorsun. PHP bunu oldukça sık yapar ve bu şekilde bir koda yol açar:
if (xyz_parse($data) === FALSE)
$error = xyz_last_error();
Çok iş parçacıklı bağlamlarda, bu daha da kötüdür.
Atma (işaretli) istisnaları
Bu yapmak için güzel bir yol. Bazı noktalarda başarısızlık bekleyebilirsiniz. Java bunu soketlerle yapar. Temel varsayım, bir çağrının başarılı olması gerektiği, ancak herkes bazı işlemlerin başarısız olabileceğini biliyor. Soket bağlantıları aralarında. Böylece arayan başarısızlıkla başa çıkmak zorunda kalır. güzel bir tasarım, çünkü arayan kişinin arızayı çözdüğünden emin olur ve arayan kişiye başarısızlıkla başa çıkabilmesi için zarif bir yol sunar.
Sonuç nesnesini döndür
Bu, bunun üstesinden gelmenin başka bir güzel yoludur. Genellikle ayrıştırma işlemi veya onaylanması gereken şeyler için kullanılır.
ValidationResult result = parser.validate(data);
if (result.isValid())
// business logic
else
error = result.getvalidationError();
Arayan için de güzel, temiz bir mantık.
İkinci vakanın ne zaman ve üçüncüün ne zaman kullanılacağı konusunda biraz tartışma vardır. Bazı insanlar istisnaların istisnai olması gerektiğine ve istisnalar olasılığını göz önünde bulundurarak tasarım yapmamanız gerektiğine inanmaktadır ve hemen hemen her zaman üçüncü seçenekleri kullanacaklardır. Bu güzel. Ama Java istisnalar kontrol, bu yüzden hiç bir neden görmüyorum değil onları kullanmak. Temel varsayım, aramanın başarılı olması gerektiği (bir soket kullanmak gibi) olduğu, ancak başarısızlığın mümkün olduğu ve denetlenmeyen ifadeleri kullanıyorum ve aramanın başarılı olup olmadığının (verilerin doğrulanması gibi) belirsiz olduğu durumlarda üçüncü seçeneği kullanıyorum. Ancak bu konuda farklı görüşler var.
Senin durumunda void
+ ile giderdim Exception
. Dosya yüklemesinin başarılı olmasını ve olmadığında istisnai olmasını beklersiniz. Ancak arayan kişi bu arıza modunu kullanmaya zorlanır ve ne tür bir hatanın meydana geldiğini doğru şekilde açıklayan bir İstisna gönderebilirsiniz.