2011-02-02 2 views
6

Я хочу расширить класс String с помощью метода создания URL-строки из строки. Я нашел ссылку здесь, которая показывает, как вы можете перемещать расширения в свой собственный пакет:Лучший способ расширить поведение класса Pharo Smalltalk?

Smalltalk Daily 07/13/10: Extending Behavior II.

Однако, я не могу найти вариант «переместить в пакет» в Pharo Smalltalk. Можно ли просто расширить основной класс с помощью нового метода, или есть лучший способ?

ответ

8

В Pharo или Писке положить методы расширения для MyPackage в категории метода называется *mypackage (или, если вы хотите быть более описательным *mypackage-slug).

методы в этих категориях принадлежат автоматически к пакету MyPackage (по крайней мере, с точки Монтичелло зрения)

8

«Это нормально, чтобы просто расширить класс ядра с новым методом, или есть лучший путь?"

В этом решении есть компромиссы. Фактически, Pharo имел String >> asUrl до самого последнего времени, когда it was removed as part of cleaning the system. С одной стороны, некоторые считают, что некоторые из них плохо подходят (см. «Лучшие практики Кент Бек»), чтобы иметь методы преобразования между объектами, которые не имеют аналогичных протоколов (семантически похожи). Кроме того, это приводит к раздутым ядрам классов (например, String и Object). Тем не менее, в вашем собственном приложении может быть веская причина, которая уравновешивает эти факторы, а так как вы ее упаковываете с помощью своего приложения, а не с помощью системы, выкарабкаетесь.

Смежные вопросы