一个很糟糕的写法 这是在犯罪

功能说明:提交订单之后,增加消费记录,扣除用户余额

//更新积分值
	public function saveMoney($uid, $money, $remark, $paymment, $chargetypes, $orderno, $status) {
		$sql = "UPDATE $this->_member_list SET money=money+$money WHERE uid=$uid";
		$row = $this->exec ( $sql );
		//增加历史记录
		if ($row > 0) {
			return $this->add ( $this->_money_history, array (‘uid‘ => $uid, ‘coupons‘ => $money, ‘date‘ => time (), ‘payment‘ => $paymment, ‘chargetypes‘ => $chargetypes, ‘remark‘ => $remark, ‘orderno‘ => $orderno, ‘status‘ => $status ) );
		}
		return 0;
	}

这个方法涉及到2个模型,用户模型和订单(在controller中耦合)

好处:假如我要替换一个用户系统,那么,我只需要管理MemberService服务类即可,跟订单完全没有关系,用户有没有减去钱,跟订单有个毛线关系,这叫做职责性。

规则:在Service类中,只能操作自己有关的数据表(按找功能导向写)tabprefix前缀相同的 如w_member*  w_order*等

<?php
//用户服务类
class MemberService {

	public function saveMoney() {
		//减去用户钱包中的钱
	}

}

class OrderController {
	/**
	 * 在控制器中进行耦合
	 */
	public function addOrder() {

		$money = self::getOrderService ()->cost ( $this->_user [‘uid‘], $_POST [‘order‘] );
		self::getMemberService ()->saveMoney ( $this->_user [‘uid‘], $money );

	}

	public static function getOrderService() {
		return new OrderService ();
	}

	public static function getMemberService() {
		return new MemberService ();
	}

}

//模型 这里不允许有任何关于用户的信息 这和订单有关
class OrderService {

	public function cost($uid, $order) {
		//这里始终要减去用户钱包中的钱
		$order = new OrderModel ();
		$order->addMoneyHistory ( $uid, $order );
		return $order [‘money‘];
	}

}

/**
 * 数据库操作类
 */
class OrderModel {
	/**
	 * 添加消费历史记录
	 * @param int $uid  用户id
	 * @param decimal $money  消费金额
	 * @param Array $order 订单信息
	 */
	public function addMoneyHistory($uid, $order) {
		$param = array (‘uid‘ => $uid, ‘coupons‘ => $order [‘money‘], ‘date‘ => time (), ‘payment‘ => $order [‘payment‘], ‘chargetypes‘ => $order [‘chargetypes‘], ‘remark‘ => $order [‘remark‘], ‘orderno‘ => $order [‘orderno‘], ‘status‘ => $order [‘status‘] );
		$this->add ( $this->_money_history, $param );
	}
}

一个很糟糕的写法 这是在犯罪

时间: 2024-10-29 13:40:50

一个很糟糕的写法 这是在犯罪的相关文章

这样很糟糕吗?

有一天,发生了一件很有趣的事情,小明上班打卡坐在位置,刚泡好一杯香醇浓郁的卡布奇诺,拿出鸡蛋灌饼之后: Random rand=new Random(); var project; Switch(DAY) { CASE DAY 1: projet = rand.Next()%365 “怎么样?projet好了没?” “这个首先需求....设计的时候....代码....修改Bug...” “这个很简单嘛,无非就是一个语句(此处可替换)的问题,一个case语句就可以了啊” CASE DAY 2: p

外包项目复杂的环境中做项目管理真的很糟糕

突然之间想写点什么,可能是写了一天的材料有点感慨,怎么开头呢,突然不好下手了. 我给这点感慨起了一个题目叫"在外包项目复杂的环境中做项目管理真的很糟糕". 项目形态,客户(甲方)国企-承建厂商(乙方)-承建方供应商(N个丙方),而我只是一个丙方中的一员.至于为什么项目的管理让丙方的我来干,大致原因是这是一个非开发的技术类项目(实施技术项目),建立企业级数据中心,采用的是大规模并行数据库+Hadoop平台(cloudera),其中采用的都是一套成熟的套装软件,乙方基本上的定位都是项目集经

一个很实用的前端框架Zui

杰哥给我推荐了一个很有用的前端框架-Zui,我看着觉得很神奇的,因为有很多我都不懂.在这里分享总结一下.首先,这是一个中国自己开发的框架,比起很多外国的框架来说,有很详细的API,而且是全中文的,不需要再经过其他人的翻译了.然后,它的内容十分丰富,很系统的分为了:基础,控件,组件,JS插件,视图几大块:而且使用起来,只需要导入js,在适当的地方加上正确的class类就可以了.对于,没有什么js基础的人,也是十分容易上手的.下面我就大体的介绍一下它的各个模块的功能.基础:基础里面我觉得很有用的主要

第一次作业:假装这里有一个很响亮的标题

---恢复内容开始--- 一.结缘计算机 缘分可以说是一个很奇妙的东西,喜欢一件事物往往从对它的美好幻想开始.相信许多人想到计算机都会将它与玩游戏联系在一起,对于我却不然,在我看来编程是一个创造的过程--这就是我对于计算机最初的美好幻想.试想通过编写一些代码便能够实现自己心中所想,这难道不是一件令人兴奋的事吗?它执行你的指令,完成你的任务,实现你的想法,这在当时是对我非常有吸引力的,于是我第一志愿便填报了计算机专业. 你认为你的条件如何?其实我并不知道这个问题应该如何回答,物质条件?素质方面?条

Go map中一个很重要的特性

先看一段代码: func main() { m := make(map[int]string) m[1] = "a" m[2] = "b" m[3] = "c" for k, v := range m { fmt.Println(k, v) } fmt.Println("-----------------") mm := make(map[int]string) mm[1] = "a" mm[2] = &q

一个很奇怪的问题

先来看看我的一段代码: 1 ArrayList<Integer> array = new ArrayList<Integer>(); 2 3 for(int i = 0;i<100;i++){ 4 array.add(i); 5 } 6 for(int i=0;i<array.size();i++){ 7 // array.remove(new Integer(i)); 8 array.remove(i); 9 } 你觉得这样能不能把array里面的东西都删除呢? 输出

UIViewAdditions(一个很方便使用的工具类吧)

我们在工程中,或多或少的要修改控件的坐标-宽度-高度,于是,经常性的见到大家self.view.frame.origin.x,self.view.frame.size.width.........相当的麻烦,在这里向大家推荐一个比较好的工具类,是UIView的类目,它里面对于求坐标,求高度什么的做了封装,很方便大家调用. @下载链接:点击这里 @.h #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interfa

一个很好的php分词类库

PHPAnalysis源程序下载与演示: PHP分词系统 V2.0 版下载 | PHP分词系统演示 | PHPAnalysis类API文档   原文连接地址:http://www.phpbone.com/phpanalysis/ 分词系统简介:PHPAnalysis分词程序使用居于unicode的词库,使用反向匹配模式分词,理论上兼容编码 更广泛,并且对utf-8编码尤为方便. 由于PHPAnalysis是无组件的系统,因此速度会比有组件的稍慢,不过在大量分词中,由于边分词边完成词库载入,因此内

为何很大的浮点大数加一个很小的数计算结果不是预期

通常浮点数被表示成N=S*rj S称为尾数,可正可负,j称为阶码可正可负.r是基数,在计算机中取以2的倍数. 计算机中为了提高精度,进行规格化操作:即假设N=11.0101  则规格化表示为N=0.110101*210表示,因为该规格化使得浮点数的表示精度最高. 机器中浮点数由两部分组成:阶码和尾数.基数为2 阶码由阶符跟阶码组成,尾数由数符跟尾数组成 其中阶码是整数,阶符和阶码的位数m合起来反映浮点数的表示范围及小数点的实际位数.尾数是小数,其位数反映了浮点数的精度. 还有机器零这个概念:即浮