Model view controller 在MVC中放置逻辑的适当位置

Model view controller 在MVC中放置逻辑的适当位置,model-view-controller,yii,Model View Controller,Yii,我正在用yii框架编写一个mvc web应用程序。我有一个业务逻辑,我不知道该放在哪里$usernameid=$model->random_id_gen('5')是我正在谈论的函数 站点控制器: <!-- snip --> public function actionIndex() { $model = new Users(); if (isset($_POST['Users'])) { //ca

我正在用yii框架编写一个mvc web应用程序。我有一个业务逻辑,我不知道该放在哪里<代码>$usernameid=$model->random_id_gen('5')是我正在谈论的函数

站点控制器:

<!-- snip -->
      public function actionIndex()
       {
         $model = new Users();

         if (isset($_POST['Users'])) {
            //call the active record table model
            $model = new Users();

            //massively assign attributes
            $model->attributes=$_POST['Users'];

            //generate random userid
            $usernameid=$model->random_id_gen('5');


<!-- snip -->

公共职能行动索引()
{
$model=新用户();
如果(isset($_POST['Users'])){
//调用活动记录表模型
$model=新用户();
//大量分配属性
$model->attributes=$\u POST['Users'];
//生成随机用户ID
$usernameid=$model->random_id_gen('5');
用户活动记录类别:

 <!-- snip -->
  public function random_id_gen($length)
    {
        $characters = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
        $max = strlen($characters) - 1;
        $string = '';

        for ($i = 0; $i < $length; $i++) {
            $string .= $characters[mt_rand(0, $max)];
        }

        return $string;
    }

公共函数随机id生成($length)
{
$characters='23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
$max=strlen($characters)-1;
$string='';
对于($i=0;$i<$length;$i++){
$string.=$characters[mt_rand(0,$max)];
}
返回$string;
}
我的问题是:这个id生成器函数是否属于活动记录模型?它是否应该位于控制器中?它是否应该位于单独的模型中,因为它是“业务逻辑”,但与数据库关系不大

我正在努力提高我的MVC课程不“膨胀”。提前感谢各位

更新
我正在寻找一个特定于yii的解决方案。如果有这样的约定,问题似乎已经发展到“yii中的库应该放在哪里”。MVC应该重命名为MVCL。这就是模型视图控制器库。此类函数应该放在单独的库系统中

控制器应位于顶部。它有两个主要功能:接受用户输入和协调其他元素(控制器/库/视图)进行输出。传统上,控制器从模型中请求数据。但数据操作(最常见)应由库中的函数完成

可以有两个级别的库,一个是复杂的(基于对象的),另一个是简单的(基于全局函数的)对于最常见的操作。例如剥离标签,或准备好数据XML,清理URL等。整个系统可以访问简单函数库,而无需任何特定库对象的实例化


有意义吗?

我知道这很保守。但由于此特定功能与数据库或操作员逻辑(控制器)无关,也不与它们交互,因此它根本不属于任何一个对象。此外,它是一个过于简单的实用工具
函数


所以这就是它应该去的地方。(除非你有意这样做。)

我用来放置库:

  • 在泛型库的扩展(/protected/extensions)中
  • 如果库是项目的通用库,则在受保护/组件中
  • 在模块特定库的受保护/modules/xxx/components中
  • 在供应商目录中,如果库很大,我不想对其进行版本设置
通常导入受保护的/components(Yii::import('application.components.*')目录,以便这些库可以根据需要提供


这对我来说很好。

据我所知,我自己也一直在使用它,Yii有一个helper文件夹,这是我用来放置helper函数的地方,就像你问的那样。自从Yii介绍了太多函数以来,我没有太多使用过它,但我不得不添加一个time函数来显示事件发生之前/之前的时间,这很有效就像helper文件夹中的一个符咒,最好的部分是Yii。当我使用Yii::import…时,我知道应该在哪里查找。希望这有帮助

谢谢你的回答,stewie。我正在寻找一个Yii特定的答案。Yii在哪里处理库?我会更新这个问题。对不起,我没有使用Yii。但是所有主要的框架都有库的概念…我应该把它重新放一遍,我很感激你的输入。谢谢你。也许这会有帮助:我会去掉编辑。那是你刚刚链接到的yii核心。你不需要为它编写代码。我很感激侦探工作。我想我只需要制作我自己的模型,作为一个零碎的库。你同意stewie的说法吗库中的ngs?是给它命名、将它放在静态类包装器中,还是将它保留为实际函数取决于可重用性方面。但是,是的。他所说的。库。