亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# MVC模式中應該怎樣區分應用程序邏輯(Controller層)和業務邏輯(Model層)?

2020-01-24 01:43:33
字體:
來源:轉載
供稿:網友

現在的大部分框架都是 MVC 模式,但 MVC 三個部分怎么配合,這里做了一點總結:

基本原則:業務邏輯代碼應該寫在 M 里面,而應用程序邏輯應該寫在 C 里面。V 只是單純的展示數據。

舉個簡單例子吧:用戶往購物車添加一個商品

用戶點擊商品的“添加到購物車”按鈕,引起一次請求。服務器開始處理該請求,過程:

1、檢查當前用戶是否有權限(比如是否已經登錄、用戶帳戶狀態、是否可以購物等)
2、檢查要添加的商品ID是否有效、
3、檢查要添加的商品庫存是否足夠
4、將商品加入購物車,并保存購物車狀態
5、反饋信息

在上述流程中:

1: 是應用程序邏輯(一般由框架實現):因為和“添加商品到購物車”這個業務沒有直接關系
2: 業務邏輯:不能購買不存在的商品,這是業務進行的基本條件
3: 業務邏輯:商品庫存決定了是否可以購買此商品,這是業務進行的基本條件
4: 業務邏輯
5: 應用程序邏輯

用代碼表示的,可能像下面這樣:

復制代碼 代碼如下:

// Cart控制器
class Controller_Cart
{
    function actionAddGoods()
    {
        $goods_id = (int)$_GET['goods_id'];
        Cart::instance()->add($goods_id)->save();
       
        echo '添加成功';
    }
}


// Cart 模型
class Cart
{
    /**
     * 購物車中的所有項目
     */
    public $items = array();
  
    /**
     * 單子模式,返回購物車對象的唯一實例
     */
    static function instance()
    {
        ...
    }
  
    function add($goods_id, $quantity = 1)
    {
        $goods = Goods::find($goods_id)->get();
        // 檢查 id 和庫存數
        if ($goods->id && $quantity > $goods->remaining)
        {
            // 添加商品到購物車
            $this->items[] = array($goods, $quantity);
        }
        else
        {
            throw new CartExecption('無效的商品 ID');
        }
        return $this;
    }
}


這個代碼不完整,但是演示了最重要的部分,就是應用程序邏輯和業務邏輯的分離。
如果這個流程走下去,用戶要結算了,那么代碼如下:
復制代碼 代碼如下:

class Controller_Cart
{
    function actionCheckOut()
    {
        Cart::instance()->checkout();
       
        echo '成功';
    }
}
class Cart
{
    function checkout()
    {
        // 開啟一個數據庫事務
        ....
       
        try
        {
            // 創建一個新的訂單對象
            // $this->owner 是當前購物車的所有者(用戶)
            $order = new Order($this->owner);
           
            // 將購物車中的所有商品添加到訂單中
            foreach ($this->items as $item)
            {
                list($goods, $quantity) = $item;
                $order->add($goods, $quantity);
            }
            // 保存訂單
            $order->save();
           
            // 清空購物車
            $this->items = array();
        }
        catch (Exception $ex)
        {
            // 出錯了,回滾事務
            ....
              
            // 再重新拋出異常
            throw $ex;
        }
       
        // 返回新建的訂單
        return $order;
    }
}


class Order extends Model
{
    public $items;
  
    function add($goods, $quantity)
    {
        $this->items[] = array($goods, $quantity);
        return $this;
    }
  
    function save()
    {
        foreach ($this->items as $item)
        {
            list($goods, $quantity) = $item;
            // 保存訂單時,減少訂單中每一個商品的庫存數
            $goods->decrRemaining($quantity);
        }
       
        // 調用父類的保存
        parent::save();
       
        return $this;
    }
}


結算的代碼很容易理解:
1、調用購物車的 checkout() 方法
2、開啟數據庫事務,這樣當保存訂單失敗時(例如庫存數不夠)則回滾,確保數據庫內容沒有受影響
3、將購物車中的所有商品添加到訂單
4、調用訂單對象的 save() 方法
  4.1、遍歷訂單的所有項目,減少商品的庫存(如果此時失敗,商品的 decrRemaining() 方法會拋出異常)
  4.2、調用模型父類的 save() 方法
5、清空購物車,返回新建的訂單對象

整個流程我們假定創建訂單就等同于客戶確認訂單,此時減少庫存。也有可能是后臺確認訂單配貨后才減少庫存,這和賣家的經營策略有關。

這兩個例子里面,業務邏輯都在模型中實現,控制器(也就是封裝應用程序邏輯的層)僅僅完成處理輸入數據、調用業務方法、反饋結果等任務。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品久久中文字幕佐佐木| 成人xxxxx| 国产精品美女主播在线观看纯欲| 亚洲高清久久网| 亚洲成人黄色在线| 欧美在线视频一区二区| 欧美日韩亚洲激情| 国产精品v片在线观看不卡| 久久久免费精品视频| 一区二区三区四区视频| 欧美在线免费看| 欧美成人亚洲成人| 黑人与娇小精品av专区| 国产亚洲欧洲黄色| 国产国语videosex另类| 日韩国产精品一区| 亚洲天堂精品在线| 国产午夜精品全部视频在线播放| 国产精品777| 亚洲片在线资源| 91精品久久久久久久久中文字幕| y97精品国产97久久久久久| 欧美午夜宅男影院在线观看| 91精品国产色综合久久不卡98口| 国产视频精品免费播放| 久久久久久久久综合| 亚洲三级av在线| 亚洲精品成人免费| 中国china体内裑精亚洲片| 成人福利在线视频| 97视频在线观看播放| 久久精品国产成人精品| 成人国产在线视频| 国产精品美女免费| 国产一区二区三区久久精品| 亚洲最大成人网色| 欧美亚洲视频在线看网址| 超碰日本道色综合久久综合| 欧美二区在线播放| 中文字幕9999| 国产精品视频免费在线| 欧美电影免费观看电视剧大全| 色综合91久久精品中文字幕| 色噜噜狠狠狠综合曰曰曰88av| 日韩欧美精品免费在线| 亚洲最大的成人网| 国产suv精品一区二区| 国产女人精品视频| 国产成人在线一区二区| 久久中文字幕一区| 国产精品视频自在线| 亚洲成人aaa| 97免费视频在线播放| 亚洲福利视频二区| 久久不射电影网| 国产aaa精品| 国产欧美 在线欧美| 国产精品日韩在线观看| 亚洲欧洲高清在线| 中文字幕日韩精品在线观看| 久久视频这里只有精品| 欧美老女人xx| 97视频免费看| 2019精品视频| 亚洲第五色综合网| 日韩av黄色在线观看| 在线精品91av| 日韩欧美在线中文字幕| 国产成人97精品免费看片| 久久在精品线影院精品国产| 高清视频欧美一级| 97在线精品国自产拍中文| 欧美日韩中文字幕日韩欧美| 国产这里只有精品| 日韩欧美在线视频日韩欧美在线视频| 国产精品海角社区在线观看| 国产成+人+综合+亚洲欧美丁香花| 91国内精品久久| 欧美人在线观看| 亚洲色图综合久久| 日韩av免费在线| 成人www视频在线观看| 亚洲最大av网站| 国内精品久久久久久| 91在线精品视频| 欧美日韩xxx| 成人av在线亚洲| 久久久久久久久国产精品| 久久国产精品久久精品| 亚洲福利视频免费观看| 97国产精品久久| 亚洲第一网站免费视频| 国产va免费精品高清在线观看| 欧美性猛交xxx| 亚洲国产精品美女| 俺去啦;欧美日韩| 日韩av一区在线| 亚洲欧美在线一区| 国产精品永久免费视频| 午夜精品一区二区三区视频免费看| 成人激情在线观看| 久久久伊人欧美| 国产va免费精品高清在线观看| 91国内在线视频| 成人免费在线网址| 国产精品一区二区电影| 在线成人免费网站| 55夜色66夜色国产精品视频| 欧美日韩国产专区| 亚洲深夜福利视频| 国产成人avxxxxx在线看| 成人免费视频xnxx.com| 在线精品高清中文字幕| 97香蕉超级碰碰久久免费的优势| 91影视免费在线观看| 国产精品网红福利| 国产欧美在线观看| 国产亚洲精品久久久久久| 精品欧美激情精品一区| 欧美国产在线电影| 97婷婷大伊香蕉精品视频| 欧美成人午夜激情| 欧美午夜电影在线| 欧美巨猛xxxx猛交黑人97人| 91人成网站www| 亚洲国产成人在线播放| 米奇精品一区二区三区在线观看| 78m国产成人精品视频| 国产视频精品在线| 久久久精品视频在线观看| 欧美午夜精品久久久久久久| 欧美二区乱c黑人| 中文字幕在线日韩| 国产一区二区精品丝袜| 最近2019中文免费高清视频观看www99| 国产欧美一区二区三区久久人妖| 中文字幕自拍vr一区二区三区| 欧美精品久久久久久久久| 国产精品久久久久久影视| 欧美视频在线免费| 国产欧美va欧美va香蕉在| 清纯唯美亚洲激情| 日韩小视频网址| 久久久精品网站| 成人精品视频在线| 日韩中文字幕网站| 国产视频福利一区| 久久久国产精品视频| 色黄久久久久久| 欧美极品美女视频网站在线观看免费| 97视频在线观看网址| 亚洲日本中文字幕| 5252色成人免费视频| 91精品国产色综合久久不卡98口| 欧美—级高清免费播放| 黑人极品videos精品欧美裸| 97免费视频在线播放| 美女视频黄免费的亚洲男人天堂| 91人成网站www| 91在线色戒在线| 国产精品av免费在线观看| 国产偷国产偷亚洲清高网站| 亚洲精品久久久一区二区三区| 一区二区三区视频观看|