日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC 实现模式 - ModelBuilder

發布時間:2025/6/15 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC 实现模式 - ModelBuilder 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將ViewModel的創建過程從Controller中分離到ModelBuilder中,本質上是為了職責的分離,也提高了Controller的可讀性。

通常的情況

使用MVC時,在Controller中,會包含很多用于創建ViewModel的代碼。
讓我們從一個例子開始。
假設我們有一個用于呈現填寫訂單的頁面(~\Order\FT-BJS-95486),對應的Action 如下:

public ActionResult Order(string productNo) {var p = ProductService.GetProduct(productNo);var model = new OrderModel{ProductNo = productNo,ProductName = p.ProductName,};return View(model); }

其中OrderModel 這個ViewModel的定義為:

public class OrderModel {public string ProductNo { get; set; }public string ProductName { get; set; }public int Count { get; set; }public string Address { get; set; } }

接下來,為了接收用戶輸入的訂單信息,我們可能會有這樣一個Action:

[HttpPost] public ActionResult Order(OrderModel model) {var p = ProductService.GetProduct(productNo);if(!ModelState.IsVaidate()){// 這里假設:// 1. ProductName并沒用通過hidden input的方式post回來// 2. ProductNo 隨同其它用戶輸入信息post回來model.ProductName = p.ProductName;return View(model);}var model2 = new OrderConfirmModel{ProductNo = model.ProductNo,ProductName = p.ProductName,Count = model.Count,Address = model.Address,};return View("OrderConfirm", model2); }

1. 問題

  • 有些ViewModel的創建可能比較“復雜”,從閱讀Controller的角度,不是“主控制流”
  • ViewModel會在不同階段被創建出來,不同階段的創建過程,往往出現一些重復的代碼
  • 2. 分析

    在上述的例子中,雖然OrderModel本身的結構及創建過程都非常簡單,但我們依然可以識別出重復的部分:

    var p = ProductService.GetProduct(productNo); model.ProductName = product.ProductName;

    我們可以歸納出這些重復的部分,分屬于兩個ViewModel被創建的“階段”:

  • Create
  • Rebuild
  • 我們據此抽象出IModelBuilder接口

    public interface IModelBuilder<TViewModel> {TViewModel Create();TViewModel Rebuild(TViewModel model); }

    3. 改造

    我們來寫一個OrderModelBuilder,實現IModelBuilder接口

    public class OrderModelBuilder : IModelBuilder<OrderModel> {private string _productNo;private string _productName;public OrderModelBuilder(string productNo, string productName){_productNo = productNo;_productName = productName;}public OrderModel Create(){var model = new OrderModel{ProductNo = _productNo,};model = this.Rebuild(model);return model;}public OrderModel Rebuild(OrderModel model){model.ProductName = _productName;return model;} }

    用OrderModelBuilder來簡化OrderController

    private OrderModelBuilder GetBuilder(string productNo) {var p = ProductService.GetProduct(productNo);var builder = new OrderModelBuilder(p);return builder; }public ActionResult Order(string productNo) {var builder = GetBuilder(productNo);var model = builder.Create();return View(model); }[HttpPost] public ActionResult Order(OrderModel model) {if(!model.IsVaidate()){var builder = GetBuilder(model.ProductNo);var model = builder.Rebuild(model);return View(model);}// 根據OrderModel創建OrderConfirmModelvar builder2 = new OrderConfirmModelBuilder(model);var model2 = builder2.Create();return View("OrderConfirm", model2); }

    這樣,就解決了我們在第1節中提出的兩個問題。

    此文介紹的內容,無關語言和平臺。

    轉載于:https://www.cnblogs.com/yicone/archive/2013/03/31/2991339.html

    總結

    以上是生活随笔為你收集整理的ASP.NET MVC 实现模式 - ModelBuilder的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 又污又黄又爽的网站 | 国产精成人品免费观看 | 9人人澡人人爽人人精品 | 亚洲情区 | 国产精品久久久久久久免费观看 | 中文字幕亚洲成人 | 亚洲欧美另类在线视频 | 91极品国产 | 给我看高清的视频在线观看 | 九色91蝌蚪 | 中文字幕一区二区三区精品 | 好好热视频 | 天天插天天射 | 吃瓜网今日吃瓜 热门大瓜 色婷在线 | 国产成年无码久久久久毛片 | 亚洲区一区二区三区 | 特黄色大片 | 亚洲色图美腿丝袜 | 日韩九九九 | 91久久久久久久久久久 | 欧美精品一区二区三 | 体内射精一区二区 | 欧美调教视频 | 国产a级大片 | 日韩精品无码一本二本三本色 | 99热国产 | 午夜亚洲aⅴ无码高潮片苍井空 | 91亚洲国产成人精品一区 | 轮乱| 日韩视频网站在线观看 | 天堂激情网| 97成人人妻一区二区三区 | 精品久久久久久久久久久久久 | 小小姑娘电影大全免费播放 | 成年人国产精品 | 久久青青操 | 越南毛茸茸的少妇 | 精品动漫一区二区三区的观看方式 | 色综合av在线 | 日韩av图片| 91精品在线免费 | 亚洲一级二级三级 | 日本少妇xxxxx | 97超碰自拍| 欧美激情国产精品免费 | 欧美老熟妇又粗又大 | 天天射天天干天天舔 | 国产精品久久久久一区二区 | www插插 | 91国产精品 | 操小妹影院 | 毛片视频播放 | 最近中文字幕在线免费观看 | 青青草久久久 | 97高清国语自产拍 | 亚洲hhh | 午夜影院在线观看18 | www精品| 91成人精品国产刺激国语对白 | 中文在线最新版天堂 | 亚洲色图18p | 在线观看日韩欧美 | 国产福利91精品一区二区三区 | 日韩不卡一区二区 | 日本亚洲免费 | 久久久久五月天 | 天天干天天爽天天射 | www天天干| 一个人看的www日本高清视频 | 午夜一区二区三区在线观看 | 中文字幕97 | 国产精品果冻传媒潘 | 欧美亚洲视频一区 | 99久久精品国产成人一区二区 | 亚洲综合婷婷久久 | 亚洲国产一区在线 | 葵司av电影| 影视av | 奶水旺盛的少妇在线播放 | 东京热加勒比无码少妇 | 美女打屁股网站 | 亚洲高清在线免费观看 | 日韩精品在线观看一区 | 日韩精品一区二区三区国语自制 | 美国av片 | 国产精品一区二区在线观看 | 桃色一区二区 | 麻豆精品视频在线观看 | 午夜啪啪网站 | 美女的诞生免费观看在线高清 | 成人做受视频试看60秒 | 欧美日韩一区二区三区四区五区六区 | 欧洲性开放大片 | 成人av手机在线观看 | 国产视频一二三区 | 国产精品怡红院 | 精品人妻一区二区三区四区不卡 | 91传媒理伦片在线观看 | 少妇精品高潮欲妇又嫩中文字幕 |