2010-03-08 2 views
0

Я просто изучаю MVC, чтобы вы могли найти мой вопрос довольно странным ...MVC, как должен быть доступен доступ с контроллера?

У моего контроллера есть доступ к различным общим объектам через объект Контейнера, переданный конструктору контроллера. Чтобы получить доступ к общим объектам, я должен сделать $ this-> container-> db для доступа к адаптеру базы данных или $ this-> container-> memcache для доступа к адаптеру Memcached. Я хочу знать Должен ли я помещать объект View в Контейнер с общими объектами или нет?

С одной стороны это действительно удобно просматривать из этого контейнера, но таким образом я не смог создать несколько экземпляров представлений (например, каждый раз, когда я вызываю метод контроллера из представления, у меня должен быть еще один экземпляр View). Каково решение? Как передать объект View в Controller и/или как мне создать новые экземпляры View из Controller?

Спасибо!

+0

Что это за контейнер? –

+0

... и адаптер db? контроллеры должны работать с моделями, а не с db или его адаптерами ... модели должны быть получены из db самостоятельно или некоторым делегатом репозитория –

+0

, почему вы вызываете метод контроллера из представления? Разве это не против разделения между MVC? – Gregoire

ответ

0

Хмм, возможно, попробуйте реализовать кеширование для статических частей. IMHO попытается вставить объект cacher (через DI) в контроллер, и пусть этот объект решит, хотите ли вы отправить частичный вид в кеш или создать новый экземпляр. Если вы хотите кэшировать данные из db, используйте тот же шаблон от контроллера к моделям, поэтому всякий раз, когда в контроллере вам нужны модели, спросите объект db cacher (тот же принцип DI). Достаточно ясно?

+0

Gabriel Ščerbák, действительно, извините за то, что так много времени. Ваши ответы действительно хороши. – Kirzilla

+0

проблем нет, но сосредоточьтесь на архитектуре, а не на конкретных реализациях, я не эксперт, поэтому обратите внимание на другие реализации, многие фреймворки делают это по-другому, а MVC не подходит для всего (посмотрите на графические интерфейсы GUI, они имеют в основном компонент основанная структура). –

1

Если вы хотите, чтобы опыт DI, делайте это и на представлениях, но я не знаю, действительно ли это помогает вам. Никогда не вызывать методы контроллера из представлений. Вместо этого напишите некоторые частичные методы просмотра и вызовите их из представлений, которые определяют макет страницы (что-то похожее на то, что делает Rails). IMHO, если вы хотите постепенно стать на MVC, начинайте с основных принципов и итеративно добирайтесь до деталей, но не изучайте архитектурный/дизайн-шаблон как MVC по частям - архитектура, дизайн, все вопросы :)

+0

Что делать, если я хочу использовать некоторые кешированные части HTML на мой взгляд? У меня есть три способа - метод контроллера вызова, метод модели вызова, метод вызова cacher. Вызов метода cacher означает передачу некоторого ключа для него, но оба cacher и view ничего не знают о ключах (но модель и контроллер знают). Метод метода вызова означает, что мы должны взаимодействовать с объектом View из Model (я действительно не знаю, считаю это плохим или хорошим). – Kirzilla

+0

Говоря «кешированные части», я имел в виду частичное кэширование HTML. – Kirzilla

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