매우 흥미로운 질문입니다. 여기에 잠시 큰 소리로 생각할 것입니다 ...
궁극적으로, 우리가 직면 한 것은 특정 기능 세트를 달성하기 위해 디자인 패턴 허용 가능한 방법을 위반하는 결정입니다. 그래서 우리는 우리 자신을 요청해야합니다
하지이
가는 MVC 패턴
3을 위반하는 것이 가능한 해결책은 무엇 MVC 패턴
2) 위반 가능한 솔루션은 무엇
1)) 어떤 옵션이 가장 좋습니까? 나는 디자인 패턴과 표준 관행을 매우 중요하게 생각하지만, 동시에 코드를 붙이면 코드가 더욱 복잡해진다. 올바른 해결책은 관행을 위반하는 것일 수있다. 어떤 사람들은 저와 동의하지 않을 수도 있습니다.
먼저 # 1을 고려하십시오.
내 머리 위로 떨어져
, 난 당신이 데이터가 어떤 식 으로든 모델에 보관해야합니다 이러한 작업을 수행하는 사람에 정말 관심이 있다면 다음과 같은 가능한 솔루션
A)의 생각? 옵서버가이 정보를 사용할 수 있도록합니다. 또한 ActiveRecord 클래스의 다른 프런트 엔드 호출자도 동일한 기능을 사용함을 의미합니다.
B) 항목을 만든 사람을 이해하는 데 정말로 관심이 없지만 웹 작업 자체를 로깅하는 것이 더 흥미로운 경우 컨트롤러 동작을 "관찰"하는 것이 좋습니다. Rails 소스를 훑어 본 이래로 얼마간의 시간이 걸렸으므로 ActiveRecord :: Observer가 모델을 "관찰"하는 사람이 누구인지 모르겠지만 컨트롤러 관찰자에게이를 적용 할 수는 있습니다. 이러한 의미에서 더 이상 모델을 관찰하지 않고 세션 및 다른 컨트롤러 유형 데이터 정보를 해당 관찰자에게 제공하는 것이 합리적입니다. C) "구조"가 가장 적은 가장 간단한 솔루션은보고있는 동작 메서드의 끝 부분에 로깅 코드를 놓기 만하면됩니다.
이제 MVC 사례를 깨고 옵션 # 2를 고려하십시오.
A) 제안한대로 Observer 모델을 세션 데이터에 액세스 할 수있는 방법을 찾을 수 있습니다. 비즈니스 논리에 모델을 결합했습니다.
B)는 귀하의 프로젝트에 대해 더 이상 자세한 내용을 모른 채 여기 어떤 다른 사람 :
내 개인적인 성향, 생각하지 수, 다음 중 하나입니다 1A, 나는이있는 경우 기록에 사람, 또는 1C을 연결하려는 경우 내가이 일에 관심이있는 곳이 몇 군데 밖에 없다. 모든 컨트롤러와 작업에 대한 강력한 로깅 솔루션을 원한다면 1B를 고려해보십시오.
모델 관찰자가 세션 데이터를 찾게하는 것이 조금 "냄새 나는"일이며, 다른 프로젝트/상황/상황에서 모델을 사용하려고 시도하면 문제가 발생할 수 있습니다.
나는 단순함 때문에 아마 1A와 같은 것을 생각하고있었습니다. – Jaryl