Php 在Silex中建模业务逻辑的最佳方法是什么?

Php 在Silex中建模业务逻辑的最佳方法是什么?,php,model-view-controller,soa,silex,Php,Model View Controller,Soa,Silex,我不确定我是否对Silex的总体概念有了正确的理解,即在哪里存储与持久性、视图等没有直接关系的“业务逻辑” 示例:在我的“演示应用程序”中,我需要一种生成n个唯一数字的方法。我需要在模板中包含这些数字以包含部分模板。我创建了一个RandomNumberServiceProvider,它可以返回x和y之间的n个数字。在我的$appclosure中,我使用了这项服务,将随机数分配给我的小树枝模板。完成了 更复杂的例子:假设您必须开发一个“复杂”的导入函数。您必须从磁盘读取数据,验证数据,以某种方式进

我不确定我是否对Silex的总体概念有了正确的理解,即在哪里存储与持久性、视图等没有直接关系的“业务逻辑”

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


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

类似的内容,是的

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

$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(...);
});