程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# MVC形式中應當如何辨別運用法式邏輯(Controller層)和營業邏輯(Model層)?

C# MVC形式中應當如何辨別運用法式邏輯(Controller層)和營業邏輯(Model層)?

編輯:C#入門知識

C# MVC形式中應當如何辨別運用法式邏輯(Controller層)和營業邏輯(Model層)?。本站提示廣大學習愛好者:(C# MVC形式中應當如何辨別運用法式邏輯(Controller層)和營業邏輯(Model層)?)文章只能為提供參考,不一定能成為您想要的結果。以下是C# MVC形式中應當如何辨別運用法式邏輯(Controller層)和營業邏輯(Model層)?正文


如今的年夜部門框架都是 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、清空購物車,前往新建的定單對象

全部流程我們假定創立定單就同等於客戶確認定單,此時削減庫存。也有能夠是後台確認定單配貨後才削減庫存,這和賣家的運營戰略有關。

這兩個例子外面,營業邏輯都在模子中完成,掌握器(也就是封裝運用法式邏輯的層)僅僅完成處置輸出數據、挪用營業辦法、反應成果等義務。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved