2011-02-02 8 views
6

String sınıfını dize dışında bir url slug oluşturmak için bir yöntemle genişletmek istiyorum. Uzantıları kendi paketlerine nasıl taşıyabileceğinizi gösteren bir bağlantı buldum:Pharo Smalltalk sınıf davranışını genişletmenin en iyi yolu?

Smalltalk Daily 07/13/10: Extending Behavior II. Ancak, Pharo Smalltalk'ta hiçbir "pakete taşı" seçeneği bulamıyorum. Çekirdek sınıfı yeni yöntemle genişletmek yeterli mi yoksa daha iyi bir yol var mı? Pharo veya Squeak yılında

cevap

8

*mypackage denilen bir yöntem kategorisinde mypackage için uzatma yöntemleri koymak (veya *mypackage-slug daha açıklayıcı olmak istiyorsanız). bu kategorilerdeki

yöntem, sadece yeni bir yöntem ile ana sınıfı uzatmak için

8

(bakış Monticello noktasından en azından) "Tamam mi mypackage pakete otomatik ait veya burada olduğu daha iyi yol?"

Bu kararın bir kısmı var. Aslında, Pharo son zamanlara kadar it was removed as part of cleaning the system dize kadar Dize >> asUrl vardı. Bir yanda, benzer protokollere sahip olmayan nesneler (semantik olarak benzer) olmayan nesneler arasında dönüşüm yöntemlerine sahip olmak, bazıları tarafından kötü bir stil olarak kabul edilir (bkz. Kent Beck'in En İyi Uygulamaları). Ek olarak, bu, şişirilmiş çekirdek sınıflarına (Dize ve Nesne gibi) yol açar. Bununla birlikte, kendi uygulamanızda, bu faktörleri dengelemek için iyi bir neden olabilir ve uygulamanızla birlikte paketlediğiniz için, sistemle taşmayın.