Ser*_*gri 4 unit-testing symfony-forms symfony
我想用单元测试创建一个高度可维护的代码.
我已经阅读了最佳实践,因此根据最佳实践组织目录,只有一个名为AppBundle的包,我正在使用注释.
我有业务逻辑问题.我读过我不应该把业务逻辑放在控制器中.由于绝大多数代码都不是要重用,我把逻辑放在控制器中.昨天我在这里读到"逻辑应该存在于控制器中,除非你要对它进行单元测试或直到你需要重新使用它"这让我晕了:如果把逻辑放在里面,我不会进行单元测试控制器?
据我所知,"控制器应尽可能精简,只需很少的代码就可以将各种东西粘合在一起".但形式怎么样?表单通常具有类似"显示表单,如果它有效并执行某些操作并显示另一页"的逻辑.现在,如果我要将表单创建和逻辑放在服务(或模型?)中,我必须将页面渲染命令放在其中,所以基本上控制器将是1行,所有其余的都在服务,以及显示哪个页面的实际决定将在服务内部完成,而不是控制器本身...那么控制器的重点是什么,只是路由?
我真的需要在继续之前理解这一点(我已经开发了3个月,我必须做很多工作,但现在比从来没有好过)......
谢谢!
编辑:一些额外的考虑因素,以解决下面的一些评论.
我清楚地了解了表单在Symfony中的工作原理,创建了表单,并在同一个地方使用"isValid()"进行管理.
让我们假设以下控制器执行以下操作:
get the current customer from security context
queries the DB to get the field $user->getIsBillable()
if the user is not billable
queries the DB to find if someone else is paying for him
else //the user is billable
create and manage form1
if the user is not billable but there is someone who is paying for him
check if the license is active (I have to call an external API)
if the license is not ok
redirect to a page to update credit card info
if the user is not billable
create and manage form2
else
create and manage form3
render the license management page with all the necessary forms created
Run Code Online (Sandbox Code Playgroud)
该怎么办?将所有这些东西放入一个可以返回表单的服务中(如果没有创建表单,则为null)?考虑到在某些表单的"有效"中,我使用简单的更新信息呈现相同的页面.或者我应该创建表单创建的服务foreach并将逻辑保留在控制器中?
您应该将逻辑保留在控制器之外,以便使代码更可重用并减少代码重复.
最佳做法是将业务逻辑注册为Symfony服务.控制器应尽可能精简,因为它只处理视图并访问服务以运行业务逻辑功能.
使用服务将使您的代码更具可重用性,并且为代码的每个部分编写单元测试会更容易.
在Symfony2中以不同的方式处理表单,您应该阅读更多相关内容:http://symfony.com/doc/current/book/forms.html
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |