Diyelim foo(String bar)
ki sadece belirli kriterleri karşılayan tellerde çalışan bir yöntemimiz var; örneğin, küçük harflerle yazılmalı, boş olmamalı veya yalnızca beyaz alana sahip olmalı ve desenle eşleşmelidir [a-z0-9-_./@]+
. Yöntemin dokümantasyonu bu kriterleri belirtir.
Yöntem, bu kriterlerden sapmaların tümünü ve hepsini reddetmeli mi, yoksa yöntem bazı kriterler için daha bağışlayıcı mı olmalı? Örneğin, eğer ilk yöntem
public void foo(String bar) {
if (bar == null) {
throw new IllegalArgumentException("bar must not be null");
}
if (!bar.matches(BAR_PATTERN_STRING)) {
throw new IllegalArgumentException("bar must match pattern: " + BAR_PATTERN_STRING);
}
this.bar = bar;
}
Ve ikinci bağışlama yöntemi
public void foo(String bar) {
if (bar == null) {
throw new IllegalArgumentException("bar must not be null");
}
if (!bar.matches(BAR_PATTERN_STRING)) {
bar = bar.toLowerCase().trim().replaceAll(" ", "_");
if (!bar.matches(BAR_PATTERN_STRING) {
throw new IllegalArgumentException("bar must match pattern: " + BAR_PATTERN_STRING);
}
}
this.bar = bar;
}
Dokümantasyon, dönüştürüleceğini ve mümkünse dönüştürülen değere ayarlanacağını belirtmeli mi, yoksa yöntem mümkün olduğunca basit tutulmalı mı ve tüm sapmaları reddetmeli mi? Bu durumda, bar
bir uygulamanın kullanıcısı tarafından ayarlanabilir.
Bunun birincil kullanım durumu, depodaki nesnelere belirli bir dize tanımlayıcısı ile erişen kullanıcılar olacaktır. Depodaki her nesne, onu tanımlamak için benzersiz bir dizeye sahip olmalıdır. Bu depolar, nesneleri çeşitli şekillerde (sql sunucusu, json, xml, binary, vb.) Saklayabilir ve çoğu adlandırma kurallarına uyan en düşük ortak paydayı belirlemeye çalıştım.
foo
hangi argümanları kabul ettiği konusunda katı olan katı bir işleve sahip olmanız gerektiğini ve kullanılabilecek bir argümanı "temizlemeye" çalışabilecek ikinci bir yardımcı işleve sahip olmanız gerektiğini söyleyebilirsiniz foo
. Bu şekilde, her yöntemin kendi başına yapması gereken daha az şey vardır ve daha temiz bir şekilde yönetilebilir ve entegre edilebilirler. Bu rotadan aşağı inerseniz, istisnai ağır bir tasarımdan uzaklaşmak da muhtemelen yardımcı olacaktır; gibi bir şey kullanabilirsiniz Optional
yerine ve sonra tüketmek fonksiyonlara sahip foo
gerekirse atış istisnalar.