Yöntem zincirleme , sonucun başka bir yöntem için çağrılması için nesnenin kendisini döndüren nesne yöntemlerinin uygulanmasıdır. Bunun gibi:
participant.addSchedule(events[1]).addSchedule(events[2]).setStatus('attending').save()
Bu, okunabilir kod veya bir "akıcı arayüz" ürettiği için iyi bir uygulama olarak görülüyor. Bununla birlikte, bana göre, nesne yönünün kendisi tarafından ima edilen gösterimi çağıran nesneyi kırıyor gibi görünüyor - sonuçta ortaya çıkan kod, önceki yöntemin sonucuna yönelik eylemleri gerçekleştirmeyi temsil etmiyor , bu da nesne yönelimli kodun genellikle çalışması bekleniyor:
participant.getSchedule('monday').saveTo('monnday.file')
Bu fark, "sonuçta ortaya çıkan nesneyi çağırmak" için nokta gösterimi için iki farklı anlam oluşturmayı başarır: Zincirleme bağlamında, yukarıdaki örnek , aslında programın kaydedilmesi amaçlanmış olsa da , yukarıdaki örnek katılımcı nesneyi kaydetme olarak okunur. getSchedule tarafından alınan nesne.
Buradaki farkın, çağrılan yöntemin bir şey döndürüp döndürmeyeceği (bu durumda çağrılan nesnenin zincirleme için kendisini döndüreceği) olup olmadığını anlıyorum. Ancak bu iki durum gösterimin kendisinden ayırt edilemez, sadece çağrılan yöntemlerin anlambiliminden. Yöntem zinciri kullanılmadığında, bir yöntem çağrısının önceki çağrının sonucu ile ilgili bir şey üzerinde çalıştığını her zaman bilirim - zincirleme ile bu varsayım kırılır ve gerçek nesnenin ne olduğunu anlamak için tüm zinciri anlamsal olarak işlemem gerekir gerçekten denir. Örneğin:
participant.attend(event).setNotifications('silent').getSocialStream('twitter').postStatus('Joining '+event.name).follow(event.getSocialId('twitter'))
Son iki yöntem çağrısı getSocialStream'in sonucunu belirtirken, önceki iki yöntem katılımcıya başvurur. Belki de bağlamın değiştiği zincirleri yazmak kötü bir uygulamadır (öyle mi?), Ancak o zaman bile benzer görünen nokta zincirlerinin aslında aynı bağlam dahilinde olup olmadığını sürekli olarak kontrol etmeniz veya sadece sonuç üzerinde çalışmanız gerekir. .
Bana göre, yüzeysel olarak zincirleme yöntemi okunabilir kod üretirken, nokta gösteriminin anlamının aşırı yüklenmesi sadece daha fazla karışıklığa neden olur. Kendimi bir programlama gurusu olarak düşünmediğim için, hatanın bana ait olduğunu varsayıyorum. Yani: Neyi kaçırıyorum? Bir şekilde zincirleme yönteminin yanlış olduğunu anlıyor muyum? Yöntem zincirlemesinin özellikle iyi olduğu bazı durumlar veya özellikle kötü olduğu durumlar var mı?
Sidenote: Bu sorunun bir soru olarak maskelenen bir görüş bildirimi olarak okunabileceğini anlıyorum. Bununla birlikte, değil - gerçekten zincirlemenin neden iyi bir uygulama olarak kabul edildiğini ve doğal nesne yönelimli gösterimi bozduğunu düşünürken nerede yanlış gittiğimi anlamak istiyorum.
.
Herhangi bir mehtod dönüş değerini göz ardı edecek ve her zaman aynı nesneyi kullanarak zincirleme yöntemleri çağıracak yerleşik bir alternatif gösterim varsa, gerçekten woud gerekmez .