1

我不确定我是否对 Silex 的整体概念正确存储“业务逻辑”的位置,这与持久性、视图等没有直接关系。

示例:在我的“演示应用程序”中,我需要一种生成 n 个唯一数字的方法。我需要模板中的这些数字来包含部分模板。我创建了一个 RandomNumberServiceProvider,它可以返回 x 和 y 之间的 n 个数字。在我的 $app-closure 中,我使用了这项服务,将随机数分配给了我的树枝模板。完毕。

更复杂的示例:假设您必须开发一个“复杂”的导入功能。您必须从磁盘读取数据,验证数据,以某种方式对其进行转换,最后将其存储到数据库中。在这种情况下,您还会创建一个 ImportServiceProvider 来访问其他服务(用于持久性......)吗?

4

1 回答 1

3

类似的东西,是的。

不过,我建议不要注入完整的服务,而是只注入工厂。这样,您可以防止应用程序逻辑在控制器(或它们的等价物)中泄漏,同时保持域对象专注于特定任务。

$factory = new \My\ServiceFactory( /* ..dependencies */ );

// --- SNIP

$app->get('/foo/{bar}', function ($app, $bar) use ($factory) {

    $someService = $factory->build( ... );
    // do something with $someService

    return new Response(...);
});
于 2012-11-05T14:03:00.117 回答