关于业务逻辑的问题,请问各位大牛帮忙解答一下!

时间:2021-09-17 01:15:54
本人是刚出来工作的PHP程序员,对于MVC也是知道怎么用,是什么意思的程度而已,希望各位大牛能帮忙解答一下几个问题。

1.业务逻辑的代码是否应该全部放在M里面,控制器只放从M里调用的函数,以及显示视图就够了?
比如说username和qq,用户输入完毕后,我需要在M里面写一系列的比如说过滤用户输入,检查重复用户名等等,然后控制器里面只需要把它们全部调用出来,然后直接输出模板就可以了?

2.怎样算是合格的符合业务逻辑的查询语句
之前在公司做过一个功能,使用foreach,for等循环语句里写SQL语句,但是多次查询会对服务器有影响,我又换个写法,把需要用到的字段全部查询出来之后,数组之间查询,比如说这样
$user = M('user')->field('id,username,qq')->select();
$user_info = M('user_info')->field('id,uid,address,card')->select();

foreach($user as $k => $v)
{
foreach($user_info as $k2 => $v2)
{
if($k['id'] == $k2['id'])
echo 'hello world';
}
}

但是别人说这样写不符合业务逻辑,那我想问一下符合业务逻辑的查询应该需要注意一些什么规范呢?

3 个解决方案

#1


从我个人的工作经验来看。
首先我对MVC的理解是:很宽泛的三层结构,在这三层结构中还可以进行更加细致的分类。相信你会接触到前段框架,同样的前段框架也分为MVC。
1. M主要对数据进行处理,我的一般做法是将数据查询出来(用你需要的数据结构,比如数组,json串,list等),在这里我不会对数据进行过多的业务处理,也就是逻辑处理,比如:当你使用If等条件语句时,你就是在做业务逻辑了。
2. C层是可以进行一些业务处理的,当然看项目风格,也可能像java一样在M与C之间加一个Service层。重要的业务处理肯定是要放在后台的,一些不重要的你可以适当的发放给V层。
3. V层,如果你使用前段框架,那么这个结构层次就更加清晰,在前段写代码也是非常快乐的一件事情。
4. 最后还是得看你用的是什么框架,你的team,你的项目代码风格。以及项目技术的新旧程度。
5. 建议:扒一扒其他已经成型的代码,从前段看到后端,你就知道项目风格了,遵循这个风格写,这就是coding style了

#2


引用 1 楼 wlyynl 的回复:
从我个人的工作经验来看。
首先我对MVC的理解是:很宽泛的三层结构,在这三层结构中还可以进行更加细致的分类。相信你会接触到前段框架,同样的前段框架也分为MVC。
1. M主要对数据进行处理,我的一般做法是将数据查询出来(用你需要的数据结构,比如数组,json串,list等),在这里我不会对数据进行过多的业务处理,也就是逻辑处理,比如:当你使用If等条件语句时,你就是在做业务逻辑了。
2. C层是可以进行一些业务处理的,当然看项目风格,也可能像java一样在M与C之间加一个Service层。重要的业务处理肯定是要放在后台的,一些不重要的你可以适当的发放给V层。
3. V层,如果你使用前段框架,那么这个结构层次就更加清晰,在前段写代码也是非常快乐的一件事情。
4. 最后还是得看你用的是什么框架,你的team,你的项目代码风格。以及项目技术的新旧程度。
5. 建议:扒一扒其他已经成型的代码,从前段看到后端,你就知道项目风格了,遵循这个风格写,这就是coding style了


忘了针对你上面的代码,其实最好就是:

class ClassName {
    public function getSomeDate(args) {
        $user = M('user')->field('id,username,qq')->select();
        $user_info = M('user_info')->field('id,uid,address,card')->select();
        return $user; // 或者返回$user和$user_info的结合,总之是你下一步要的数据结构
    }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public function processData() {
    $className  = new ClassName();
    $user = $className->getSomeData();
    .......
   //把要用到的数据从model层取出来然后进行处理
    foreach($user as $k => $v) {
        foreach($user_info as $k2 => $v2) {
if($k['id'] == $k2['id']) {
echo 'hello world';
}
}
    }
}

#3


非常感谢大牛的精心指导,不过可能是因为我个人比较笨的原因,对你的回答还是觉得有点模糊,我能否理解成,比如我输入了username,M那里只需要写取出用户名的函数,和写入用户名的函数就行了,一些处理比如说过滤用户的非法字符输入,用通过M里取出用户名的函数来检查是否用户名重名这种的就写在C里,然后V里只需要给一些小判断,比如是否为空那种

还有就是感谢 wlyynl 大牛 对我的代码处理上做出修改,我也学到了一些知识,不过其实我的意思是,别人说这样把全部数据全部取出来不符合业务逻辑,所以我想问的是要写符合业务逻辑的查询语句需要注意一些什么

#1


从我个人的工作经验来看。
首先我对MVC的理解是:很宽泛的三层结构,在这三层结构中还可以进行更加细致的分类。相信你会接触到前段框架,同样的前段框架也分为MVC。
1. M主要对数据进行处理,我的一般做法是将数据查询出来(用你需要的数据结构,比如数组,json串,list等),在这里我不会对数据进行过多的业务处理,也就是逻辑处理,比如:当你使用If等条件语句时,你就是在做业务逻辑了。
2. C层是可以进行一些业务处理的,当然看项目风格,也可能像java一样在M与C之间加一个Service层。重要的业务处理肯定是要放在后台的,一些不重要的你可以适当的发放给V层。
3. V层,如果你使用前段框架,那么这个结构层次就更加清晰,在前段写代码也是非常快乐的一件事情。
4. 最后还是得看你用的是什么框架,你的team,你的项目代码风格。以及项目技术的新旧程度。
5. 建议:扒一扒其他已经成型的代码,从前段看到后端,你就知道项目风格了,遵循这个风格写,这就是coding style了

#2


引用 1 楼 wlyynl 的回复:
从我个人的工作经验来看。
首先我对MVC的理解是:很宽泛的三层结构,在这三层结构中还可以进行更加细致的分类。相信你会接触到前段框架,同样的前段框架也分为MVC。
1. M主要对数据进行处理,我的一般做法是将数据查询出来(用你需要的数据结构,比如数组,json串,list等),在这里我不会对数据进行过多的业务处理,也就是逻辑处理,比如:当你使用If等条件语句时,你就是在做业务逻辑了。
2. C层是可以进行一些业务处理的,当然看项目风格,也可能像java一样在M与C之间加一个Service层。重要的业务处理肯定是要放在后台的,一些不重要的你可以适当的发放给V层。
3. V层,如果你使用前段框架,那么这个结构层次就更加清晰,在前段写代码也是非常快乐的一件事情。
4. 最后还是得看你用的是什么框架,你的team,你的项目代码风格。以及项目技术的新旧程度。
5. 建议:扒一扒其他已经成型的代码,从前段看到后端,你就知道项目风格了,遵循这个风格写,这就是coding style了


忘了针对你上面的代码,其实最好就是:

class ClassName {
    public function getSomeDate(args) {
        $user = M('user')->field('id,username,qq')->select();
        $user_info = M('user_info')->field('id,uid,address,card')->select();
        return $user; // 或者返回$user和$user_info的结合,总之是你下一步要的数据结构
    }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public function processData() {
    $className  = new ClassName();
    $user = $className->getSomeData();
    .......
   //把要用到的数据从model层取出来然后进行处理
    foreach($user as $k => $v) {
        foreach($user_info as $k2 => $v2) {
if($k['id'] == $k2['id']) {
echo 'hello world';
}
}
    }
}

#3


非常感谢大牛的精心指导,不过可能是因为我个人比较笨的原因,对你的回答还是觉得有点模糊,我能否理解成,比如我输入了username,M那里只需要写取出用户名的函数,和写入用户名的函数就行了,一些处理比如说过滤用户的非法字符输入,用通过M里取出用户名的函数来检查是否用户名重名这种的就写在C里,然后V里只需要给一些小判断,比如是否为空那种

还有就是感谢 wlyynl 大牛 对我的代码处理上做出修改,我也学到了一些知识,不过其实我的意思是,别人说这样把全部数据全部取出来不符合业务逻辑,所以我想问的是要写符合业务逻辑的查询语句需要注意一些什么