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 应用程序-创建数据模型和存储库的更多相关文章

  1. 【Asp.net入门5-02】创建数据模型和存储库

  2. 『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件

    代码: using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DemoWebControl ...

  3. 【Asp.net入门02】搭建Asp.net开发环境

    本节主要讲解: 什么是asp.net asp.net开发和运行环境介绍 1.什么是ASP.NET Asp.net不是一种编程语言,而是一种开发技术.我们可以利用这种技术所提供的类库,使用C#或者VB编 ...

  4. Servlet入门(第一个Servlet的Web程序)

    新建maven项目,注意项目的类型 project名为ServletExample 点击Finish.建立maven项目完毕例如以下 生成后的文件夹没有java源代码文件夹.依照maven的约定,还要 ...

  5. 结合实体框架(代码优先)、工作单元测试、Web API、ASP. net等,以存储库设计模式开发示例项目。NET MVC 5和引导

    介绍 这篇文章将帮助你理解在库模式.实体框架.Web API.SQL Server 2012.ASP中的工作单元测试的帮助下设计一个项目.净MVC应用程序.我们正在开发一个图书实体和作者专用的样例图书 ...

  6. 第一个asp.net MVC5+ExtJS6入门案例项目

    最近在学习asp.net MVC,结合前段时间学习的ExtJS,做了一个入门示例.不过还有一个json日期显示的问题没有解决. [思路] 1.先搭建一个asp.net MVC项目. 2.将MVC项目的 ...

  7. ASP.NET + MVC5 入门完整教程八 -—-- 一个完整的应用程序(上)

    https://blog.csdn.net/qq_21419015/article/details/80509513 SportsStore 1.开始创建Visual Studio 解决方案和项目这里 ...

  8. 【Asp.net入门15】第一个Asp.net应用程序-输入验证

    前言 所谓输入验证,顾名思义就是验证用户输入符不符合要求.前面我们已经完成了这个简单的应用程序,但还有一个问题需要解决:用户可以在Default.aspx窗体中 提交任何数据,甚至可以提交根本不包含任 ...

  9. 【Asp.net入门11】第一个ASP.NET 应用程序-创建摘要视图

    目前已经完成了应用程序的基本结构单元,受邀者也能够做出回复.这一节将添加一个支持组件,以显示收到的回复摘要,以便用户的朋友了解谁会参加晚会,并做出适当安排.在Solution Explorer中右键单 ...

随机推荐

  1. UVALive 6467 Strahler Order(拓扑序列)

    In geology, a river system can be represented as a directed graph. Each river segment is an edge; wi ...

  2. 20172321 20172333 2017-2018 暑假作业APP

    20172321 20172333 2017-2018 暑假作业APP 项目介绍 项目成员 吴恒佚 20172321 严域俊 20172333 项目简介 从理论上来说,这是一个贪吃蛇游戏. <贪 ...

  3. 第五周作业总结(内含用Junit测试ArrayStack和LinkedStack课堂练习报告)

    ---恢复内容开始--- 学号 20162310<程序设计与数据结构>第五周学习总结 教材学习内容总结 集合分为线性集合(集合中的元素排成一行)和非线性集合(按不同于一行的方式来组织元素, ...

  4. 冲刺One之站立会议8 /2015-5-21

    今天我们把聊天界面做了优化和改进,主要实现了聊天的功能.显示了正在进行通信的成员列表,和当前状态,是否连通和正常通信,大体完成了预期的目标. 燃尽图8

  5. AbstractFactory(PeopleSkin)

    使用抽象工厂模式,完成下述产品等级结构: 实现 UML类图 public class BlackFactory implements MWFactory{ public Man produceMan( ...

  6. Task 6.2冲刺会议六 /2015-5-19

    今天主要写的是登陆界面,用户状态,历史登录信息,默认用户等等.由于大部分时间都是把代码组合拳起来的过程,所以总会出现各种bug,有好大一部分不会修复.明天要继续这一部分还有熟悉一下聊天的主界面.

  7. 四则运算(window窗体程序)

    我的第一个程序 忙活了半个下午做出来了,勉强可以见人,虽然还有些瑕疵,但是我也尽力了...... 我做的是一个能对0--10之间的整数进行四则运算的,题目的数据是程序自动生成的,而且程能接收用户输入的 ...

  8. Eclipse安卓开发环境

    首先,安卓开发就要搭建安卓开发环境,现在可能流行用AS,但是由于个对eclipse恐惧感比较小一点就选择了Eclipse: 大致流程: 1.安装java开发工具包(JDK): 2.Eclipse集成开 ...

  9. 第二章 Socket用法详解

    构造Socket Socket构造方法如下: Socket() //Creates an unconnected socket, with the system-default type of Soc ...

  10. synchronized、锁、多线程同步的原理是咋样

    先综述个结论: 一般说的synchronized用来做多线程同步功能,其实synchronized只是提供多线程互斥,而对象的wait()和notify()方法才提供线程的同步功能. 一般说synch ...