Я не вижу в вашем требовании ничего, что говорит о том, что пользователь должен знать, что такое URL. Если вы реализуете этот метод, вы подразумеваете, что вы можете получить такие вещи, как Order.url_for_order или Cart.url_for_cart. Если вы хотите изменить способ указания URL-адресов, вам придется изменить все классы. Желательно, чтобы все объекты в вашей системе имели идентификатор и вспомогательный класс View, у которого есть такой метод, как:
URLHelper.url_for_object (MyObject)
Что вам абсолютно необходимо сделать, так это изолировать объекты в вашей модели от того, как они расположены, и оставить расположение до веб-фреймворка, который вы используете. Общая рекомендация заключается в том, что каждый класс задает идентификатор, а обработчик в вашей веб-инфраструктуре зависит от класса, который он отображает. Он получает класс по переданному ему идентификатору.
Итак, вы видите, что зависимость - это один из способов. Класс View зависит от базовой модели, но модель не зависит от того, как она расположена. Если впоследствии вы захотите кэшировать объекты, вы можете реализовать это на уровне представления, опять же, базовый объект не знает и не зависит от того, кэшируется ли он.