【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中右键单 ...
随机推荐
- centos7安装oracle亲测可用
http://www.linuxidc.com/Linux/2016-04/130559p2.htm
- Final发布用户使用报告 -- Thunder团队
Thunder爱阅app Final发布用户使用报告 用户数量:14人 以下为用户评论:(注:为了保护用户的姓名权,以下用户名以昵称形式给出.) 序列 昵称 个人信息 获得软件途径 使用次数 用户评论 ...
- OO学习体会与阶段总结(测试与论证)
前言 随着期末的到来,对于面向对象程序设计课程的学习也迎来了尾声.在最后一个月的从课程中,笔者对于面向对象程序规格实现层面的单元测试.正确性论证以及使用UML图描述程序的设计进行了深入的学习.通过 ...
- 结对项目:SudokuGame
1. Github项目地址:https://github.com/ZiJiaW/SudokuGame GUI在BIN目录下的SudokuGUI.rar中,解压后打开SudokuGame.exe即可.2 ...
- Java程序设计基础项目总结报告
Java程序设计基础项目总结报告 20135313吴子怡 一.项目内容 运用所学Java知识,不调用Java类库,实现密码学相关算法的设计,并完成TDD测试,设计运行界面. 二.具体任务 1.要求实现 ...
- 1、数据库与excel表格的数据导入导出
1.居民用户界面中,excel数据导入导出: 2.其他5张表数据显示到本角色主页的container容器中.
- web07-jdbcBookStore
新建web项目,名字 新建servlet,名字CreateDBServlet 内容为: ---- 配置web.xml 数据库的URL.driveclass.user.passWord都写在web.xm ...
- delphi 图像处理 图像放大缩小
procedure TDR_QM_ZP_Form.btn_FDClick(Sender: TObject); //图像放大 begin my_int1 := Trunc( my_int1 * 1.1) ...
- 一个关于狗记录的Java练习
package 狗场;import java.util.*;public class dogRoom { /** * 作者.范铭祥 * 狗场的狗体重查询问题 */ public static void ...
- angularJS1笔记-(9)-自定义指令(restrict/template/replace)
index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
提示