【Asp.net入门07】第一个ASP.NET 应用程序-创建数据模型和存储库
1.理解概念
先理解一下两个概念。
模型
模型是指数据的结构类型,以及可调用的方法。对面向对象编程方法来说,其实就是类。模型类就是一个描述数据的类。只有把数据按一定方式描述出来,我们才能在程序中方便地使用它。
存储库
直白解释就是存储数据的仓库。通常就是用数据库来存储数据,当然也有文件存储等其他存储方式。存储库的作用很显然是将数据永久保存起来。
2.创建数据模型
我们在【Asp.net入门06】第一个ASP.NET 应用程序(4)-案例说明中定义的案例项目比较简单,只需要一个简单的数据模型。下面是添加这个数据模型(类)的操作步骤。
操作步骤
第一步:在Solution Explorer(解决方案资源管理器,记住这两个单词,以后不解释了)中右键单击PartyInvites项目(注意是点击项目,不是点击解决方案),然后从弹出菜单中选择Add→Class(类)。(另一种方法是从弹出菜单中选择“新建项”也是一样的效果)
提示 如果没有看到Class菜单项或该菜单项处于禁用状态,说明Visual Studio调试器可能正在运行。当它正在运行应用程序时,Visual Studio会限制你对项目进行更改。请从Debug菜单中选择Stop Debugging(停止调试),然后重试。
第二步:第一步之后,Visual Studio将会显示Add New Item(添加新项)对话框,其中包含你可以添加到ASP.NET项目中的所有项的模板。确保“类模板”处于选中状态,将其名称设置为GuestResponse.cs,然后单击Add按钮。Visual Studio将创建一个新的C#类文件,并打开文件以供编辑。设置该文件的内容,使其与代码清单1-4的内容相一致。
代码清单1-4 GuestReponse类

代码解释
(1)类成员:属性
上述代码是一个C#类的定义。其中,类名称是GuestResponse,该类有4个成员,这种成员在C#中有一个专门的名字:属性。其实它相当于java中的getXXX和setXXX成员方法。上述成员属性是一种简化写法,完整写法是:

图2 Name属性的完整写
提示
java中给一个成员变量提供读写功能的写法是: class GuestResponse{
private String name;
public String getName(){
return name;
}
public String setName{String n}{
name = n;
}
}
(2)可空类型:bool?
bool类型变量可以赋的值只有两个:true和false。bool?也是一种数据类型,bool?变量可以赋的值有三个:true、false和null。null表示既不是true也不是false,值为空。后面将解释WillAttend属性选择这种数据类型的原因。
3.创建存储库
GuestReponse类实例表示晚会嘉宾的回函。这需要一个存储库来存储所创建的GuestResponse对象。在实际应用中,此存储库通常为数据库。我们后面会创建一个更加真实的ASP.NET应用程序时,将介绍如何设置和使用数据库。在本章中,我们只需要一种简单快捷的存储方法,因此,示例将对象存储在内存中。这样做的好处是方便,但每次停止或重新启动应用程序,数据都会丢失。对现实中的Web应用程序来说,这可能是一个奇怪的选择,但就本章来说,这是一个不错的选择。
要定义存储库,在项目中添加一个新的类文件ResponseRepository.cs,这个类的作用是实现实现将数据存储在内存中,并对数据进行读写。请确保该文件的内容与代码清单1-5的内容相一致。
代码清单1-5:ResponseRepository.cs

代码分析
第11句:实例化一个链表,链表里存放GuestResponse对象。
第18句-21句:返回包含所有受邀者信息的链表。很明显,这是一个成员函数,并不是属性或者成员变量。IEnumerable<T>是一种接口类型,因为List<T>是继承自IEnumerable<T>的,所以返回的resposes对象是没有问题的。这涉及到使用接口实现多态的知识,这里不专门展开,请自行参考浅谈C# 多态的魅力(虚方法,抽象,接口实现)
思考
请课后自行学习接口的知识,弄清接口的作用和基本用法,并编写一个简单的接口程序。
第23句-26句:往存储库中增加一个邀请(GuestResponse对象)。这里是直接增加到内存链表responses对象中(实际项目中往往是写到数据库里)。
第10句和第13-16句:这是一种软件设计模式,名称叫单例模式,简单点说就是保证这个程序在运行时,系统中只有一个ResponseRepository实例。详细介绍请参考:C#设计模式(1)——单例模式
存储库提供了各种用于创建、读取、更新和删除数据对象的方法(统称为CRUD方法,即Create、Read、Update、Delete),但我们只需要读取此应用程序中的所有数据对象,并向其中添加新对象即可。后面将介绍更加典型的存储库。
【Asp.net入门07】第一个ASP.NET 应用程序-创建数据模型和存储库的更多相关文章
- 【Asp.net入门5-02】创建数据模型和存储库
- 『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件
代码: using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DemoWebControl ...
- 【Asp.net入门02】搭建Asp.net开发环境
本节主要讲解: 什么是asp.net asp.net开发和运行环境介绍 1.什么是ASP.NET Asp.net不是一种编程语言,而是一种开发技术.我们可以利用这种技术所提供的类库,使用C#或者VB编 ...
- Servlet入门(第一个Servlet的Web程序)
新建maven项目,注意项目的类型 project名为ServletExample 点击Finish.建立maven项目完毕例如以下 生成后的文件夹没有java源代码文件夹.依照maven的约定,还要 ...
- 结合实体框架(代码优先)、工作单元测试、Web API、ASP. net等,以存储库设计模式开发示例项目。NET MVC 5和引导
介绍 这篇文章将帮助你理解在库模式.实体框架.Web API.SQL Server 2012.ASP中的工作单元测试的帮助下设计一个项目.净MVC应用程序.我们正在开发一个图书实体和作者专用的样例图书 ...
- 第一个asp.net MVC5+ExtJS6入门案例项目
最近在学习asp.net MVC,结合前段时间学习的ExtJS,做了一个入门示例.不过还有一个json日期显示的问题没有解决. [思路] 1.先搭建一个asp.net MVC项目. 2.将MVC项目的 ...
- ASP.NET + MVC5 入门完整教程八 -—-- 一个完整的应用程序(上)
https://blog.csdn.net/qq_21419015/article/details/80509513 SportsStore 1.开始创建Visual Studio 解决方案和项目这里 ...
- 【Asp.net入门15】第一个Asp.net应用程序-输入验证
前言 所谓输入验证,顾名思义就是验证用户输入符不符合要求.前面我们已经完成了这个简单的应用程序,但还有一个问题需要解决:用户可以在Default.aspx窗体中 提交任何数据,甚至可以提交根本不包含任 ...
- 【Asp.net入门11】第一个ASP.NET 应用程序-创建摘要视图
目前已经完成了应用程序的基本结构单元,受邀者也能够做出回复.这一节将添加一个支持组件,以显示收到的回复摘要,以便用户的朋友了解谁会参加晚会,并做出适当安排.在Solution Explorer中右键单 ...
随机推荐
- 字幕字体滚动插件——scroxt.js
README scroxt.js Overview scroxt.js是一个字体滚动的插件库,包括视频弹幕滚动,直播弹幕.直播弹幕强制模式.单行水平左右滚动.文本垂直滚动上下,用于简单快捷生成滚动字体 ...
- webpack入门指南-step02
webpack 安装 1)安装前的准备:webpack是基于node环境的项目,所以使用前必须先安装node和npm. 在安装 Webpack 前,你本地环境需要支持 node.js.如果电脑没有装过 ...
- Notes of Daily Scrum Meeting(11.13)
Notes of Daily Scrum Meeting(11.13) 今天邹欣老师给我们讲课大家还是很有收获的,大家课堂的参与度确实有了很大的提升,而且邹欣老师关于项目Scrum Meeting报告 ...
- [BUAA OO]第二次博客作业
第五次作业 这次作业是电梯系列作业的终极版,要求是使用多线程实现三部电梯的运行.这次作业的难点在于第一次运用多线程技术,对于线程中的行为并不了解,以及电梯功能的实现(如果之前作业采取的是扫描指令队列预 ...
- 剑指offer:替换空格
题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 一开始没理解,函数中 ...
- 用JAVA制作微型操作系统4月23日情况
弄好了一个自认为十分精美的界面,但本想着昨天就在开始按钮上先套入控制jp222面板上的jb2标签上的时间更新,这按钮起到开始线程的作用(我认为按钮应该可以通过t.start()来触发线程,结果不知为什 ...
- tomcat启动问题排查
遇到tomcat错误时不一定是tomcat的配置问题,还有可能是项目的配置问题.检查下xml的servlet配置是不是出了问题. tomcat8.0使用注解的方式帮我注册了servlet了,这时候已经 ...
- Unity发布Exe后,去掉提示分辨率的窗口
Unity版本:2017.4 菜单File->Build Settings...,修改如下图的位置,将“Display Resolution Dialog”从Enabled改为Disabled
- Alpha版本冲刺(六)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- HTML常用标签及约束
注释 <!--这是一段注释--> 样式表 外部样式(CSS) <head> <link rel="stylesheet" type="tex ...
提示