我仍然习惯MVC概念,但我理解它的基本概念。 我在" PHP"上发现了这段代码。博客。
<?php
class Todo_Controller extends Base_Controller
{
public function action_list() {
$todos = Todo::all();
return View::make("list")
->with("todos", $todos);
}
public function action_view($id) {
$todo = Todo::where_id($id)->first();
return View::make("view")
->with("todo", $todo);
}
public function action_delete($id) {
$todo = Todo::where_id($id)->first();
$todo->delete();
return View::make("deleted");
}
public function action_new() {
return View::make("add");
}
public function action_add() {
$todo = new Todo();
$todo->title = Input::get("title");
$todo->description = Input::get("description");
$todo->save();
return View::make("success");
}
}
这是一个控制器,但我注意到 action_list(),action_view()和action_delete()正在运行SQL,但它是在控制器中执行的。 这是为什么?不应该在模型中吗? 模型的目的不是做任何相关的数据吗?
我之所以这样问是因为我看过很多laravel教程,付费和无薪教程都是这样做的,我问自己,为什么要将业务逻辑与数据模式混合在一起?
答案 0 :(得分:0)
您可以使用存储库模式从控制器中提取数据查询。
getTwitterFollowersIDsCollectionsClient : function (screenname){
Meteor.setTimeout(function(screenname){
T.get('followers/ids', { screen_name: screenname }, Meteor.bindEnvironment(function (err, data, response) {
console.log("from getTwitterFollowersIDsCollectionsClient : "+data.ids);
var vids = data.ids;
for(var i in vids)
{
TwitterFollowersIDsCollecions.insert({
twitterFollowerID:vids[i]
});
}
return data;
}));
},10);
return;
}
然后将存储库注入控制器。这样,如果你改变数据库,或者说沟通,那么你只需要编写一个具有相同界面的新存储库,然后只需更改注入。
class TodoRepository {
public function get_todo($id)
{
return Todo::find($id);
}
public function get_all_todos()
{
return Todo:all();
}
public function create_todo($todo)
{
return Todo::create([
'title' => $todo['title'],
'description' => $todo['description']
]);
}
public function delete_todo($todo)
{
return Todo::find($todo)->delete();
}
}
这是你的控制器并不关心get_all_todos或delete_todo,它只是要求存储库获取/修改数据然后返回结果。