零、前言

今天的网络开发者在向市场交付他们的产品时面临许多挑战。曾几何时,应用只需要在 Internet Explorer 中正常运行即可。今天的应用不仅必须在多个浏览器中运行,还必须在运行于多个设备上的多个操作系统上运行。

ASP.NET MVC 4 移动应用开发旨在作为成功构建针对当前桌面浏览器和旨在消费移动网络的浏览器的网络应用的指南。

ASP.NET MVC 4 移动应用开发带您走过创建 web 应用从概念到交付的过程。

这本书涵盖了什么

在本书的第一部分,我们构建了一个功能齐全的示例应用来管理和共享自制啤酒的配方。第 1 章为移动网络开发,首先讨论了理解如何为移动网络开发的重要性。然后给你一个我们如何到达今天的移动网络的简短历史。本章最后讨论了作为开发人员,如果我们要成功地为移动网络开发应用,我们必须承认的所有限制。

第二章酿酒与你,向你介绍酿酒与酿酒领域——我们的酿酒配方分享应用。根据我们对这个领域的理解,我们构建了应用的需求,然后研究了 ASP.NET MVC 4 及其新特性将如何帮助我们开发它。我们通过设置我们的环境来启动我们的移动仿真器来设计和测试我们的应用来结束这一章。

第三章介绍 ASP.NET MVC 4,介绍 MVC 模式。然后,当我们开始构建应用时,我们讨论如何在 ASP.NET MVC 4 中实现它。到本章结束时,我们应用的初始外壳将完成,并在我们的桌面和移动浏览器中运行。

第 4 章在 EF5 中建模 BrewHow,带领我们创建 BrewHow 的数据模型。我们首先讨论实体框架的新特性和改进,并使用 EF 中的代码优先模型为我们的领域创建一个数据模型和数据库。通过使用迁移,模型和数据库被不断地优化,直到我们的应用的需求得到满足,并且我们的应用正在使用来自 LocalDB 的数据。

第 5 章酿酒领域和领域驱动的设计,向我们介绍了 DDD 的原则。我们通过创建存储库、视图模型和域实体来加强持久性、逻辑和显示之间的界限,从而将这些原则应用到 BrewHow 中。

第 6 章编写可维护代码,首先讨论面向对象设计的 SOLID 原则;有助于编写可维护代码的原则。然后,我们回顾依赖注入和控制反转的主题,作为帮助我们巩固 BrewHow 代码库的工具。本章最后将这些原则和工具应用到代码库中,利用 ASP.NET MVC 4 提供给我们的扩展点。

第 7 章使用路由和区域分离功能,详细讨论了 ASP.NET MVC 4 中的这一关键技术。我们研究如何通过利用路由和区域,我们可以创建有意义的搜索引擎优化友好的网址,并将酿酒厂的功能分成酿酒厂包含的内容的独立工作单元。然后,我们通过增加对用户评论的支持来锻炼我们的知识。

第 8 章验证用户输入,查看中包含的服务器端数据验证支持.NET Framework 的System.ComponentModel.DataAnnotations命名空间。数据模型和视图模型被修改以支持这些属性的使用,因此我们可以在客户端验证输入,并在数据到达服务器后再次验证。我们还探讨了这些技术如何帮助保护啤酒如何免受常见的网络攻击,如 CSRF 和 XSS。

第 9 章识别和授权用户,介绍了 ASP.NET MVC 4 中提供的新会员功能。BrewHow 被修改为使用新的会员功能支持用户身份验证,然后我们修改应用以允许使用谷歌登录进行身份验证。我们通过将 BrewHow 数据模型与会员数据模型结合在一起来结束这一章,这样我们就可以将食谱和评论与创建它们的用户联系起来。

我们的应用现在在功能上已经完成,并且已经满足了第 2 章酿酒和您中提出的所有要求。在本书的第二部分,我们来看看 ASP.NET MVC 4 提供的一些高级特性。第 10 章异步编程和捆绑探讨了我们如何设计应用的服务器端部分,以更高效、更短的等待时间将信息传递给用户,这对于移动应用至关重要。为了实现这一点,我们首先检查并实现对异步动作的支持。然后,我们检查以包的形式提供给我们的缩小支持。

第 11 章实时网络编码研究了我们如何使用始终在线的连接在 BrewHow 中提供桌面应用的错觉。然后,我们利用 SignalR 来模拟从服务器到 BrewHow 的推送通知。

随着我们的应用完全优化以向移动设备提供内容,我们现在可以开始本书的第三部分。第 12 章为移动设备设计你的应用讨论了我们如何使用下一代网络标准 HTML5 和 CSS3 来创建响应性标记,以最适合用户正在查看的设备的方式向用户呈现我们的内容。

第 13 章扩展对移动 Web 的支持在我们探索 ASP.NET MVC 4 内置的移动视图支持时,将移动设计的概念扩展到了我们的服务器。然后,我们将这一概念扩展到使用新的显示模式支持的特定移动设备。

第 14 章利用 jQuery Mobile 改善用户体验,展示了如何将 BrewHow 转换为移动网络应用,在外观和感觉上就像是该设备的原生产品。我们查看了 jQuery Mobile 提供的一些控件,并将它们应用到我们所学的所有内容中,以构建一个完善且功能齐全的移动应用。

第 15 章读者挑战,展示了如何将 BrewHow 扩展为用户更丰富的体验。我们讨论如何将全文搜索技术集成到 BrewHow 中,如何为社交网络提供支持,以及如何将 BrewHow 扩展到真正的本地移动应用中。然后鼓励读者自己承担这些任务。

这本书你需要什么

要在本书中构建示例应用,您需要一份 Microsoft Visual Studio Express for Web 2012。要查看示例应用,您需要一个能够支持 HTML5 和 CSS3 的网络浏览器。本书中的示例应用是使用运行在 Windows 8 上的谷歌 Chrome 和 Opera Mobile Emulator 的当前版本进行测试的。

这本书是给谁的

这本书是为任何希望学习 ASP.NET MVC 4 及其在开发面向移动网络的应用中的作用的个人准备的。这本书的材料假定读者已经熟悉了.NET 框架和对 C#的接触。如果你是 ASP.NET MVC 的新手,想要一个好的扎实的入门,如果你想了解 ASP.NET MVC 4 的新功能,或者如果你想了解如何修改你的 web 应用来支持多种设备,这本书是为你准备的。

惯例

在这本书里,你会发现许多区分不同种类信息的文本风格。以下是这些风格的一些例子,以及对它们的含义的解释。

文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和推特句柄如下所示:“在 MVC 的早期版本中,所有应用引导代码都位于Global.asax代码隐藏中。

代码块设置如下:

.white-go
{
    width:31px;
    background:url('img-sprite.png') 0 0;
}

.orange-go
{
    width: 31px;
    background:url('img-sprite.png') -32px 0;
}

当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:

public interface IBrewHowContext
{
  IDbSet<Models.Recipe> Recipes { get; set; }
  IDbSet<Models.Review> Reviews { get; set; }
  IDbSet<Models.Style> Styles { get; set; }

IDbSet<Models.UserProfile> UserProfiles { get; set; }

  int SaveChanges();
}

public class BrewHowContext : DbContext, IBrewHowContext
{
  public IDbSet<Models.Recipe> Recipes { get; set; }
  public IDbSet<Models.Review> Reviews { get; set; }
  public IDbSet<Models.Style> Styles { get; set; }
  public IDbSet<Models.UserProfile> UserProfiles { get; set; }
  public BrewHowContext()
    : base("DefaultConnection")
  {
  }
  /* ... */
}

新名词重要词语以粗体显示。您在屏幕上看到的单词,例如菜单或对话框中的单词,出现在如下文本中:“选择ASP.NET MVC 4 网络应用图标,并在名称位置文本框中分别提供新项目的名称和位置”。

警告或重要提示会出现在这样的框中。

类型

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或可能不喜欢什么。读者反馈对我们开发您真正能从中获得最大收益的标题非常重要。

要给我们发送一般反馈,只需向<[feedback@packtpub.com](mailto:feedback@packtpub.com)>发送电子邮件,并通过您的消息主题提及书名。

如果你对某个主题有专业知识,并且对写作或投稿感兴趣,请参阅我们在www.packtpub.com/authors上的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

下载示例代码

您可以从您在http://www.packtpub.com的账户中下载您购买的所有 Packt 书籍的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,以便将文件直接通过电子邮件发送给您。

勘误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现了错误——可能是文本或代码中的错误——如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书籍,点击勘误表提交表链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上传到我们的网站上,或添加到该标题的勘误表部分下的任何现有勘误表列表中。通过从http://www.packtpub.com/support中选择您的标题,可以查看任何现有的勘误表。

盗版

互联网上版权材料的盗版是所有媒体的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。

请通过<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,获取疑似盗版资料的链接。

我们感谢您在保护我们作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们将尽最大努力解决。