关于解耦,关注点分离,框架和我的商业模式的困惑

时间:2014-07-01 18:03:25

标签: php symfony separation-of-concerns decoupling business-logic-layer

我对解耦,分离问题,框架(Symfony2)和我的商业模式感到有点困惑。让我解释一下:))

在现代网络项目中,我们应该有一个瘦控制器。这似乎是现在最好的做法。此外,将框架和业务模型分离似乎是最佳做法。并做分离关注。我对所有这一切都很好。使用事件/事件调度就像魅力一样解决了这些问题。

但现在我有一项任务,我需要做以下事情:

  • 读取cookie
  • 根据cookie的内容将一些数据保存到数据库
  • 删除Cookie

首先我理解在Symfony2中使用cookies:

  • 我使用请求对象
  • 读取了cookie
  • 我使用响应对象操作cookie
  • 我应该避免直接使用\ setCookie

这就是我感到困惑的地方。这是因为:

  • 我认为所有这三个步骤都是我需要执行的“任务”的一部分。因此,在同一类/业务模型中完成所有工作是有意义的。

  • 我希望尽可能避免混淆我的商业模式和第三方组件(如请求/响应)。

现在我有两个选择 - 但他们两个都在某种程度上感觉不对:

  1. 严格解耦框架和业务模型 - 读取/写入cookie将留在控制器中,因为涉及框架组件。持久性在业务模型中完成。 - 但是:并非现在所有属于该任务的代码都在一个地方。

  2. 我也可以拥有在一个地方执行任务所需的所有代码。但是,我需要在我的服务中提供请求和响应,我尽量避免。

  3. 你们如何处理这类问题?

    谢谢, 斯蒂芬

2 个答案:

答案 0 :(得分:1)

我认为您必须做出选择:如果您试图避免将请求注入服务,则必须直接将其操作到控制器中。

当然你可以使用一个私人控制器,你可以从一个任意的动作调用,你可以存储所有的代码:这样你可以遵循DRY方法,这始终是一个很好的做法,你可以避免注射

然而,在我对symfony的看法中,我会使用注射保持控制器小而不重的服务。在该服务中,您可以存储与控制器对象操作相关的所有业务逻辑。

然而,这个答案可能因发展而异,所以很难找到合适的方法

答案 1 :(得分:0)

关于与框架脱钩,我在这里写了一篇关于http://thesolidphp.com/decoupling-application-from-framework/

的博客文章

您可以通过创建自己的使用Symfony cookie管理器的类来分离cookie处理。该类应该实现像CookieStorage这样的接口。您的域对象仅依赖于该接口。具体实现可以是SymfonyCookieStorage,它将调用Symfony cookie处理对象。现在,您的业务对象与Symfony cookie管理器分离。

这与我在博客文章中写到的概念相同。这样你就可以解决所有问题,并让你不知道他们正在使用Symfony。