我只是掌握了MVC框架,我常常想知道模型中应该有多少代码.我倾向于有一个数据访问类,其方法如下:
public function CheckUsername($connection, $username)
{
try
{
$data = array();
$data['Username'] = $username;
//// SQL
$sql = "SELECT Username FROM" . $this->usersTableName . " WHERE Username = :Username";
//// Execute statement
return $this->ExecuteObject($connection, $sql, $data);
}
catch(Exception $e)
{
throw $e;
}
}
Run Code Online (Sandbox Code Playgroud)
我的模型往往是映射到数据库表的实体类.
模型对象是否应具有所有数据库映射属性以及上面的代码,或者可以将实际上数据库工作的代码分开吗?
我最终会有四层吗?
我正在寻求澄清是否将代码放入控制器,实体或提供服务.
我有'cardset'和'card'对象(其中许多后者嵌入在前者MongoDB中),由普通的PHP类/对象表示.这些包含属性,例如'id','postal_address'.
我有一种生成卡片PDF的方法.目前我在'Card'对象中有这个,所以从我可以调用的Controller:
$card->makePDF()
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很干净,但我怀疑我错了.
如果我将所有逻辑放在控制器中,这些逻辑变得冗长且难以操作,而且我不确定控制器是否可以作用于我的对象的方法.那是什么服务?
试图总结一下:如果一个对象知道它可以做"自己"的所有常规事物并将它们作为成员函数包含在其中,或者其他地方的方法应该通过该对象来进行操作.如果是这样,那些方法应该保留在哪里?
我很确定它不是'存储库',因为它似乎有助于检索/存储实体.
谢谢!
我想用单元测试创建一个高度可维护的代码.
我已经阅读了最佳实践,因此根据最佳实践组织目录,只有一个名为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 …
Run Code Online (Sandbox Code Playgroud)