C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?
现在的大部分框架都是MVC模式,但MVC三个部分怎么配合,这里做了一点总结:
基本原则:业务逻辑代码应该写在M里面,而应用程序逻辑应该写在C里面。V只是单纯的展示数据。
举个简单例子吧:用户往购物车添加一个商品
用户点击商品的“添加到购物车”按钮,引起一次请求。服务器开始处理该请求,过程:
1、检查当前用户是否有权限(比如是否已经登录、用户帐户状态、是否可以购物等)
2、检查要添加的商品ID是否有效、
3、检查要添加的商品库存是否足够
4、将商品加入购物车,并保存购物车状态
5、反馈信息
在上述流程中:
1:是应用程序逻辑(一般由框架实现):因为和“添加商品到购物车”这个业务没有直接关系
2:业务逻辑:不能购买不存在的商品,这是业务进行的基本条件
3:业务逻辑:商品库存决定了是否可以购买此商品,这是业务进行的基本条件
4:业务逻辑
5:应用程序逻辑
用代码表示的,可能像下面这样:
//Cart控制器 classController_Cart { functionactionAddGoods() { $goods_id=(int)$_GET['goods_id']; Cart::instance()->add($goods_id)->save(); echo'添加成功'; } }
//Cart模型 classCart { /** *购物车中的所有项目 */ public$items=array(); /** *单子模式,返回购物车对象的唯一实例 */ staticfunctioninstance() { ... } functionadd($goods_id,$quantity=1) { $goods=Goods::find($goods_id)->get(); //检查id和库存数 if($goods->id&&$quantity>$goods->remaining) { //添加商品到购物车 $this->items[]=array($goods,$quantity); } else { thrownewCartExecption('无效的商品ID'); } return$this; } }