代码生成,除了CRUD还能干啥?

有朋友曾经问到一个问题,“代码生成”在很多开源框架里面都有这个功能。就是根据表的定义,自动生成与程序设计相关的前后端代码。

当然,无容置疑,我们的RDS也是这样的。只是除了CRUD我们还有什么?

我们的系统其实也是代码的搬运工,我们不能创造什么代码,我们提供的是一种可以通过表单设置,就可以让我们的设计保持足够的灵活性的方法。

除了增加、修改、删除、查看详情外,我们的系统提供了经常会使用的,导入,导出,打印,修改字段,跳转,弹窗,无关联操作等方法。这些方法没有什么神奇的地方,甚至可以说是有些简陋。那么,他们是如何提高我们的开发效率的呢?

首先,开发就是一个配置的过程,我们在定义一个按钮操作的时候,我们需要:

定义后端针对这个按钮需要调用的方法,并将方法依赖的控制器、服务、模型等一一创建好。

针对这个方法需要进行接口授权,或者后端菜单和方法的授权

针对这个方法在前端需要创建jsapi,以便确定如何调用这个接口

针对这个访问我们需要在前端为之创建一个按钮,并根据权限确定其显示还是隐藏

OK,到此为止,主要的事情我们都落实好了,那么其具体功能才能被进一步的考虑到。那么在此之前的这些操作,其实都是有规律可循的,完全可以不用程序员去自己定义或者修改。

那么如果,我们将上述的四步都交由程序完成,那么我们只需考虑的就是这个按钮背后需要实现的业务逻辑是什么就可以了。

而RDS其实要做,而且正在做的就是这个工作,我们将程序化的操作,总结汇总起来,找到其中的规律,让我们的代码生成器来做好四个方面的工作,将业务的实现留给程序员。当然我们有些方法甚至是把业务也给简单的实现了,而且完全可堪一用。

比如我们抽象出来一种方法“无关联按钮”,什么是无关联按钮?

我们修改一个行的数据,必须选中一行,这个按钮就与一行有关联

我们删除几个行的数据,必须选中多行,这个按钮就与多行有关联

那么无关联按钮,就与行无关。

比如,如下图所示,我们为会员模块生成测试数据的按钮,他就是一个无关联按钮

无管理按钮的定制

这种按钮给我们提供了足够的灵活性,首先是按钮要完成什么功能,我们并没有提供,只是提供了后端控制器中的一个方法。剩余的其他四项,我们都帮您做完了。

1. 控制器及其方法,无非就是方法里面是空的

/* 	* @Description  生成数据(定制) 	*/public function singleButton(){	 $data = $this->request->post();       // code here       return json(['status'=>200]);} 

2. 提供了为此按钮进行授权的管理界面

对按钮进行授权

3. 为调用这个接口提供了相应的jsapi

//生成数据(定制)export function singleButton(params) {	return request({ url: '/Single.Member/singleButton',method: 'post',data: params})} 

4. 创建前端按钮,并根据权限确定是否显示

<el-buttontype="success":size="formSize"icon="el-icon-plus"@click="singleButton(ids)"v-if="checkPermission('/Single/Member/singleButton.html')" >生成数据(定制)</el-button> 

当系统为我们完成了这些代码后,系统已经可以正常运行起来了,只是,我们还没有为此无关联按钮,实现其特定的业务逻辑而已。

下面展示的就是我们实现完成的后的无关联按钮后端方法的源码

/*start*/	/* 	* @Description  生成数据(定制) 	*/	public function singleButton(){        $faker = PoppyFakerFactory::create('zh_CN');        for($i=0;$i < 100;$i++){            $data = [                'username'      => $faker->userName,                'mobile'        => $faker->phoneNumber,                'email'         => $faker->email,                'name'          => $faker->name,                'gender'        => $faker->numberBetween(1,2),                'birthday'      => $faker->unixTime('now'),                'headimg'       => $faker->imageUrl(640,480),                'ssq'           => $faker->state . '-' . $faker->city . '-' . $faker->address,                'address'       => $faker->streetAddress,                'amount'        => $faker->numberBetween(1000,2000),                'password'      => md5(time().config('rds.password_secrect')),                'status'        => 1,                'creater_id'    => $this->userInfo['user_id'],                'create_time'   => time()            ];            $sort_id = Db::name('single_member')->insertGetId($data);            Db::name('single_member')->where(['member_id'=>$sort_id])->data(['sort_id'=>$sort_id])->update();        }        return json(['status'=>200]);	}    /*end*/

特别说明:为保证我们自己定义的业务逻辑不会被再次生成的代码覆盖,我们需要做两件事情:

1. 生成前后端代码后,将无关联操作对应的后端方法用/**start/ …. /*end*/包括起来

/*start*/	/* 	* @Description  生成数据(定制) 	*/	public function singleButton(){		......	}/*end*/ 

2. 将此方法修改为后端不再生成

设置为后端代码不再生成

通过上面的案例说明,我们想向您传递的是一种编程理念,我们应该把能够由机器实现的,进来交给计算机自动完成,程序员需要做的是计算机很难自动完成的部分。只要充分利用这些功能,我们就可以大幅度地降低开发的时间,提高效率,降低出错的机率。

我相信能够为用户提供帮助的软件,一定是有价值的!

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年8月21日
下一篇 2022年8月21日

相关推荐