当前位置: 首页 > news >正文

专业网站建设价格大全by72777最新域名查询

专业网站建设价格大全,by72777最新域名查询,上海免费做网站,代做网站app上一篇文章我们了解了一下MVC在ASP.NET8中的一些基础概念,接下来深入了解一下ASP.NET Core MVC中Model的一些特性和用法。 Model 职责 Model 代表应用程序的核心数据和业务逻辑部分。它负责: 封装业务数据:表示应用程序中的实体,…
上一篇文章我们了解了一下MVC在ASP.NET8中的一些基础概念,接下来深入了解一下ASP.NET Core MVC中Model的一些特性和用法。

Model

职责

Model 代表应用程序的核心数据和业务逻辑部分。它负责:
  • 封装业务数据:表示应用程序中的实体,如用户、订单、商品等。
  • 处理业务逻辑:包含数据验证、计算、规则判断等。
  • 与数据存储交互:通过 ORM(如 Entity Framework Core)或其他方式访问数据库。
  • 为视图提供数据:将处理后的数据传递给视图进行展示。

类型

在 ASP.NET Core MVC 中,Model 主要有三种类型:领域模型、视图模型和绑定模型。
领域模型(Domain Model)
  • 代表业务实体和核心业务逻辑。
  • 通常对应数据库中的表结构。
  • 例如:UserProductOrder 类。
  • 领域模型通常包含属性、方法和业务规则。
视图模型(ViewModel)
  • 专门为视图设计的数据结构。
  • 只包含视图需要展示或输入的数据。
  • 解决领域模型与视图需求不匹配的问题。
  • 例如:UserViewModel 可能只包含用户名和邮箱,而不包含密码等敏感信息。
  • 视图模型有助于减少视图与领域模型的耦合。
绑定模型(Binding Model)
  • 用于接收用户输入的数据模型。
  • 通过模型绑定(Model Binding)机制,将请求数据绑定到该模型。
  • 通常与视图模型合并使用。

设计原则

  • 单一职责:每个模型类应专注于特定业务领域或视图需求。
  • 数据验证:利用数据注解(Data Annotations)或自定义验证逻辑,确保数据合法。
  • 解耦视图和业务逻辑:通过视图模型隔离视图和领域模型,避免直接暴露数据库实体。
  • 可测试性:设计清晰的模型有助于单元测试业务逻辑。

示例

下面通过一个图书管理系统中图书的增删改查来帮助我们深入了解和学习Model的实际用法。
领域模型(Domain Model)
领域模型代表数据库实体和核心业务逻辑。
// Models/Book.cs
using System;namespace YourNamespace.Models
{// 单一职责:领域模型只负责业务逻辑public class Book{public int Id { get; set; }  // 主键public string Title { get; set; }public string Author { get; set; }public DateTime PublishDate { get; set; }public decimal Price { get; set; }// 业务逻辑:判断是否经典public bool IsClassic(){return (DateTime.Now - PublishDate).TotalDays > 3650;}}
}

视图模型(ViewModel)
视图模型专门为视图设计,包含视图需要展示的数据,可能是领域模型的子集或扩展。
// Models/ViewModels/BookViewModel.cs
using System;namespace YourNamespace.Models.ViewModels
{// 单一职责:视图模型只负责展示数据格式化public class BookViewModel{public int Id { get; set; }public string Title { get; set; }public string Author { get; set; }//根据Book的数据来对下面这些值进行赋值public string PublishDateString { get; set; }  // 格式化后的日期字符串public string PriceString { get; set; }        // 格式化后的价格字符串public string ClassicStatus { get; set; }      // 是否经典的文字描述}
}

绑定模型(Binding Model)
绑定模型用于接收用户输入,通常用于表单提交,包含验证特性。
// Models/BindingModels/BookCreateModel.cs
using System;
using System.ComponentModel.DataAnnotations;namespace YourNamespace.Models.BindingModels
{// 单一职责:专注于接收用户输入和验证,保证数据安全和完整。public class BookCreateModel{[Required(ErrorMessage = "书名不能为空")][StringLength(100, MinimumLength = 2, ErrorMessage = "书名长度应在2到100字符之间")]public string Title { get; set; }[Required(ErrorMessage = "作者不能为空")][StringLength(50)]public string Author { get; set; }[Required(ErrorMessage = "出版日期不能为空")][DataType(DataType.Date)]public DateTime PublishDate { get; set; }[Range(0.01, 1000, ErrorMessage = "价格必须在0.01到1000之间")]public decimal Price { get; set; }}
}

控制器
这三种模型分别在控制器中的使用方式请查看下面代码示例:
// Controllers/BooksController.cs
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using YourNamespace.Models;
using YourNamespace.Models.ViewModels;
using YourNamespace.Models.BindingModels;namespace YourNamespace.Controllers
{public class BooksController : Controller{private static List<Book> books = new List<Book>{new Book { Id = 1, Title = "ASP.NET Core 入门", Author = "张三", PublishDate = new DateTime(2015, 5, 1), Price = 59.9m },new Book { Id = 2, Title = "C# 高级编程", Author = "李四", PublishDate = new DateTime(2010, 3, 15), Price = 79.9m },new Book { Id = 3, Title = "设计模式精解", Author = "王五", PublishDate = new DateTime(2000, 7, 20), Price = 99.9m }};// 显示图书列表,使用视图模型public IActionResult Index(){var viewModels = books.Select(b => new BookViewModel{Id = b.Id,Title = b.Title,Author = b.Author,PublishDateString = b.PublishDate.ToString("yyyy-MM-dd"),PriceString = b.Price.ToString("C"),ClassicStatus = b.IsClassic() ? "是" : "否"}).ToList();return View(viewModels);}// 显示图书详情,使用视图模型public IActionResult Details(int id){var book = books.Find(b => b.Id == id);if (book == null)return NotFound();var viewModel = new BookViewModel{Id = book.Id,Title = book.Title,Author = book.Author,PublishDateString = book.PublishDate.ToString("yyyy-MM-dd"),PriceString = book.Price.ToString("C"),ClassicStatus = book.IsClassic() ? "是" : "否"};return View(viewModel);}// 显示创建表单,GET 请求[HttpGet]public IActionResult Create(){return View();}// 处理创建表单提交,POST 请求,使用绑定模型[HttpPost]public IActionResult Create(BookCreateModel model){if (!ModelState.IsValid){return View(model);}// 将绑定模型转换为领域模型var newBook = new Book{Id = books.Max(b => b.Id) + 1,Title = model.Title,Author = model.Author,PublishDate = model.PublishDate,Price = model.Price};books.Add(newBook);return RedirectToAction(nameof(Index));}}
}

视图
视图模型模型在视图中的使用方式请查看下面代码示例:
@model IEnumerable<YourNamespace.Models.ViewModels.BookViewModel><h2>图书列表</h2><table border="1" cellpadding="5"><tr><th>书名</th><th>作者</th><th>出版日期</th><th>价格</th><th>是否经典</th><th>操作</th></tr>@foreach (var book in Model){<tr><td>@book.Title</td><td>@book.Author</td><td>@book.PublishDateString</td><td>@book.PriceString</td><td>@book.ClassicStatus</td><td><a asp-action="Details" asp-route-id="@book.Id">详情</a></td></tr>}
</table><p><a asp-action="Create">添加新书</a></p>

使用场景

通过上面的描述和代码示例总结出三种模型的使用场景和区别:

模型类型

作用

适用场景

说明

领域模型

代表业务实体和业务逻辑,映射数据库结构

业务核心层,数据持久化,业务规则封装

直接反映业务对象,包含业务方法,如 IsClassic()

视图模型

专门为视图设计,包含视图需要展示的数据

视图展示层,数据格式化、组合,避免视图直接依赖领域模型

只包含视图需要的字段,格式化数据,减少视图与领域模型耦合

绑定模型

用于接收和验证用户输入的数据

控制器接收表单提交,数据验证,防止非法输入

包含数据验证特性,确保输入合法,通常是表单对应的模型

http://www.cadmedia.cn/news/8477.html

相关文章:

  • 企业自助网站建设大数据培训课程
  • 网站建设服务杭州seo优化工具
  • 深圳专业的网站制作公司营销推广方式
  • 多元 集团 网站建设方案腾讯企点下载
  • 有限公司怎么注册公司杭州网站优化服务
  • 旅游网站毕业论文网站提交入口链接
  • 网站建设与规划专业关键词分析工具
  • 网站设计难吗怎样让自己的网站排名靠前
  • 网站建设的企业百度爱采购平台登录
  • 南京网站建设案例住房和城乡建设部官网
  • 邯郸又出现一例上海优化外包
  • 直播网站建设需要多少钱网络推广专员是做什么的
  • 河南住房和城乡建设厅网站特种软文写作技巧
  • 免费网站推广服务sem工作原理
  • 物流网络平台seo百科大全
  • 山东省建设部网站网页模板素材
  • 手机网站制作 尺寸qq推广平台
  • 代办公司注册哪家好上海优化公司排行榜
  • 什么是自建站小学四年级摘抄新闻
  • 网站建设若干意见网上销售有哪些方法
  • 软件开发软件下载南宁seo咨询
  • dw网站制作的一般流程想要导航推广网页怎么做
  • 成都网站建设 培训站长素材网站官网
  • 网站建设未来关键词排名查询工具免费
  • 做公章网站深圳优化公司找高粱seo服务
  • 网站建设 上传和下载功能重庆seo优化公司
  • 网站综合开发怎么做私人网站管理软件
  • 阿里云多网站建设百度推广优化技巧
  • 交友网站建设策划方案(2)百度首页入口
  • 吴桥县做网站搜索排名广告营销怎么做