【发布时间】:2015-09-22 05:37:24
【问题描述】:
通过 Request 对象在 SF2 中检索会话。嗯,当考虑某些架构时,这会成为一种问题 - 在需要从服务内部访问会话变量的情况下。
或者,我在这件事上不太正确? (希望如此)。
显然,用户通过网络浏览器发出的每个请求都是一个请求。所以只要我们在标准 SF2 中使用控制器动作,我们就有 Request。但是我们是否应该将 Request 对象传递给我们需要的任何服务?
将 Request 对象传递给所有需要运行其方法的服务(例如,存储信息、检查设置、放置过滤器以显示数据等 - 在一些较大的应用程序中,它相当多!)因为它 ,这对我来说似乎是一个非常愚蠢的想法。它还打破了S.O.L.I.D. OOP 推荐中的“S”。
所以我得出了一个结论,我需要:
将 Request obj 传递给许多服务,只是因为依赖服务可能需要来自它的 一些数据(即如上损坏的“S”)
每次我在每个控制器操作(即代码重复)中需要时,从 Request 中检索和处理数据 - 在这种情况下,我不传递 Request obj,但之前准备好所有需要的数据 - 但我必须这样做然后在几乎所有控制器中的许多操作方法中使用它(从请求中检索/处理数据只是对另一个服务的简单调用,但它不是集中式的)
我提出这个问题,因为我有例如解决以下问题:
我对整个页面上的所有不同数据(来自不同数据源)使用相同的过滤器。
过滤器可以启用和禁用 - 单个会话的所有页面都应该记住它们
我认为将“禁用”过滤器保存到会话中可能是最好的方法(因为默认情况下应该看到所有数据,即所有过滤器都应该处于“启用”状态)
第三点 - 将数据(过滤器)保存到会话 - 是 SF2 中的问题,如上所述。为了在页面上显示过滤后的数据,我需要访问会话,从而访问 Request obj。这意味着我很难将“S”保留在 SOLID 中,因为依赖于服务的方法以始终将 Request obj 传递给它。
还有比上面提到的 2 个更好的解决方案吗(即一个,破坏 SOLID,或者两个,代码重复)?
【问题讨论】:
标签: php symfony architecture