通过请求对象在SF2中检索会话。嗯,当考虑一些架构时,这会成为一种有问题的情况 - 在服务中需要访问会话变量的情况下。会话和请求对象困境
或者,在这件事上我不太正确? (希望如此)。
很明显,用户通过网页浏览器发送的每个请求都是的请求。所以只要我们在标准SF2中使用控制器动作,我们就有请求。但是,我们是否应该将Request对象传递给我们需要的任何服务?
将Request对象传递给所有需要运行它们的方法的服务(例如,存储信息,检查设置,放置用于显示数据的过滤器等等 - 在一些更大的应用程序中,它们相当多),因为它可能因为依赖服务需要,对我来说似乎是一个非常愚蠢的想法。它也打破了OOP推荐的S.O.L.I.D.中的“S”。
于是我想出了一个结论,我必须要么:
请求传递OBJ许多服务只是因为依赖服务可能需要从它的一些数据(即打破“S “)如上所示)
每次我需要每一个控制器动作(即代码复制)时,都会从请求中检索和处理数据 - 在这种情况下,我没有传递Request obj,但是之前准备好了所有需要的数据 - 但我必须在很多时候做到这一点在几乎所有控制器的操作方法(检索/从请求处理的数据仅仅是一个简单的调用另一个服务,但那就不是集中)
我把这个问题,因为我有例如下面要解决的问题:
我使用的是相同的过滤器对所有不同的数据(从不同的数据源)的整个页面上。
过滤器可以启用和禁用 - 他们应该记住所有页面的单次
我决定拯救“已禁用”过滤器会话可能是最好的办法(因为默认情况下所有的数据应该可以看出,即所有过滤器应为“使能”状态)
第三点 - 保存数据(过滤器)的会话 - 是什么使麻烦SF2,如上所述。为了在页面上显示过滤的数据,我需要访问一个会话,从而访问Request obj。这意味着我在SOLID中保留“S”是有困难的,因为依赖于服务的方法总是将Request obj传递给它。
是否还有其他更好的解决方案(比如上面提到的2个解决方案(即一个,打破SOLID或两个代码复制)?