我对解耦,分离问题,框架(Symfony2)和我的商业模式感到有点困惑。让我解释一下:))
在现代网络项目中,我们应该有一个瘦控制器。这似乎是现在最好的做法。此外,将框架和业务模型分离似乎是最佳做法。并做分离关注。我对所有这一切都很好。使用事件/事件调度就像魅力一样解决了这些问题。
但现在我有一项任务,我需要做以下事情:
首先我理解在Symfony2中使用cookies:
这就是我感到困惑的地方。这是因为:
我认为所有这三个步骤都是我需要执行的“任务”的一部分。因此,在同一类/业务模型中完成所有工作是有意义的。
我希望尽可能避免混淆我的商业模式和第三方组件(如请求/响应)。
现在我有两个选择 - 但他们两个都在某种程度上感觉不对:
严格解耦框架和业务模型 - 读取/写入cookie将留在控制器中,因为涉及框架组件。持久性在业务模型中完成。 - 但是:并非现在所有属于该任务的代码都在一个地方。
我也可以拥有在一个地方执行任务所需的所有代码。但是,我需要在我的服务中提供请求和响应,我尽量避免。
你们如何处理这类问题?
谢谢, 斯蒂芬
答案 0 :(得分:1)
我认为您必须做出选择:如果您试图避免将请求注入服务,则必须直接将其操作到控制器中。
当然你可以使用一个私人控制器,你可以从一个任意的动作调用,你可以存储所有的代码:这样你可以遵循DRY方法,这始终是一个很好的做法,你可以避免注射
然而,在我对symfony的看法中,我会使用注射保持控制器小而不重的服务。在该服务中,您可以存储与控制器对象操作相关的所有业务逻辑。
然而,这个答案可能因发展而异,所以很难找到合适的方法
答案 1 :(得分:0)
关于与框架脱钩,我在这里写了一篇关于http://thesolidphp.com/decoupling-application-from-framework/
的博客文章您可以通过创建自己的使用Symfony cookie管理器的类来分离cookie处理。该类应该实现像CookieStorage这样的接口。您的域对象仅依赖于该接口。具体实现可以是SymfonyCookieStorage,它将调用Symfony cookie处理对象。现在,您的业务对象与Symfony cookie管理器分离。
这与我在博客文章中写到的概念相同。这样你就可以解决所有问题,并让你不知道他们正在使用Symfony。