Я нахожу, что это очень интересный вопрос. Я собираюсь задуматься вслух здесь ...
В конечном итоге мы сталкиваемся с тем, что мы решили нарушить приемлемую практику шаблона проектирования, чтобы достичь определенного набора функций. Таким образом, мы должны спросить себя
1) Каковы возможные решения, которые бы не нарушившие MVC шаблон
2) Каковы возможные решения, которые бы нарушающим шаблон MVC
3) Какой вариант лучше? Я считаю, что шаблоны проектирования и стандартные методы очень важны, но в то же время, если удержание их делает ваш код более сложным, правильным решением может быть нарушение правил. Некоторые люди могут не согласиться со мной по этому поводу.
Давайте рассмотрим вопрос № 1.
Off верхней части моей головы, я бы думать о следующих возможных решений
A) Если вы действительно заинтересованы в том, кто выполняет эти действия, должны эти данные должны храниться в модели каким-либо образом? Это сделает эту информацию доступной для вашего наблюдателя. А это также означает, что любой другой пользовательский интерфейс вашего класса ActiveRecord получает одинаковые функции.
B) Если вам неинтересно понимать, кто создал запись, но больше заинтересованы в регистрации самих веб-действий, вы можете подумать о «наблюдении» действий контроллера. Прошло некоторое время с тех пор, как я попытался найти источник Rails, поэтому я не уверен, что их ActiveRecord :: Observer «наблюдает» за моделью, но вы можете адаптировать ее к наблюдателю контроллера. В этом смысле вы больше не наблюдаете модель, и имеет смысл сделать эту информацию о сеансе и другой информации типа контроллера этому наблюдателю. C) Самое простое решение с наименьшей «структурой» - это просто отказаться от кода регистрации в конце ваших методов действий, которые вы смотрите.
Рассмотрите вариант №2 сейчас, нарушая практику MVC.
A) Как вы предлагаете, вы могли бы найти средства, чтобы ваша модель Observer имела доступ к данным сеанса. Вы привязали свою модель к своей бизнес-логике.
B) Не может думать ни о каком других здесь :)
Моего личного наклонения, не зная больше подробностей о вашем проекте, либо 1A, если я хочу, чтобы прикрепить человек к записям, или 1С, если есть только в нескольких местах, где я заинтересован в этом. Если вы действительно хотите найти надежное решение для ведения журналов для всех своих контроллеров и действий, вы можете рассмотреть 1B.
Наличие вашей модели наблюдателя нахождение данных сеанса немного «вонючий» и, скорее всего, будет ломаться, если вы попытаетесь использовать вашу модель в любом другом проекте/ситуации/контексте.
Я думал, может быть что-то вроде 1А, возможно, из-за своей простоты. – Jaryl 2008-09-25 15:29:23