Söyle sorma prensibi diyor ki:
Nesnelere ne yapmalarını istediğinizi söylemeye çalışmalısınız; Onlara durumları hakkında soru sorma, bir karar verme ve sonra onlara ne yapacaklarını söyleme.
Sorun şu ki, arayan kişi olarak, daha sonra nesnenin durumunu değiştiren sonuçlanan nesnenin durumuna dayalı kararlar almamanız gerekir. Uyguladığınız mantık muhtemelen sizinki değil nesnenin sorumluluğundadır. Nesnenin dışında kararlar almanız onun kapsüllemesini ihlal ediyor.
Basit bir örnek "Sor yok, söyle" olduğunu
Widget w = ...;
if (w.getParent() != null) {
Panel parent = w.getParent();
parent.remove(w);
}
ve söyle sürümü ...
Widget w = ...;
w.removeFromParent();
Peki ya removeFromParent yönteminin sonucunu bilmem gerekiyorsa? İlk tepkim, ebeveyn çıkarıldı mı yoksa çıkarılmadıysa, boolean ifadesini döndürecek olan RemoveParent öğesini değiştirmekti.
Ama daha sonra bunu yapmamasını söyleyen Komuta Sorgu Ayırma Paternine rastladım .
Her yöntemin bir eylemi gerçekleştiren bir komut veya arayana veri döndüren bir sorgu olması gerektiğini, ancak her ikisini de içermemesi gerektiğini belirtir. Başka bir deyişle, bir soru sormak cevabı değiştirmemelidir. Daha resmi olarak, metotlar yalnızca referans olarak saydam oldukları ve bu nedenle hiçbir yan etkisinin olmadığı durumlarda bir değer vermelidir.
Bu ikisi gerçekten birbirleriyle çelişiyor mu ve ikisi arasında nasıl seçim yapabilirim? Bununla ilgili Pragmatik Programcı veya Bertrand Meyer ile birlikte mi gideceğim?