Skip to content

Latest commit

 

History

History
121 lines (61 loc) · 10.9 KB

File metadata and controls

121 lines (61 loc) · 10.9 KB

十五、读者挑战

在这本书里,我们研究了移动网络的历史,学习了如何开发考虑到移动网络的网络应用,然后将该网络应用转化为移动网络社区的正式成员。从第一章开始,我们已经走了很长一段路,但坦率地说,我们只是开始了使用 ASP.NET MVC 4 开发移动网络应用的旅程。如果我们试图涵盖整个主题,我们会有一本书,大约 300 磅重,需要一个小树林印刷。

此外,如果我们涵盖了所有可以想象到的内容,那么读者们,你们会有什么乐趣呢?我坚信你在做的时候学得最好,我想向你挑战一些事情。

这一章将根据你在这本书里的部分阅读,为你提出一些需要完成的挑战。

全文搜索

我们的网站目前缺乏用户直接搜索菜谱的能力。我们的用户可能想通过风格、成分或简单的名字来找到食谱。如果我们的网站已经被适当地抓取和索引,他们可以去他们最喜欢的搜索引擎,但是为什么不在我们的网站上嵌入搜索引擎的功能呢?

您面临的挑战是使用以下技术之一,并为 BrewHow 添加全文搜索功能。

嵌入式搜索

如果你希望用户能够搜索到你网站的内容,但你又不想亲自经历编写这个功能的麻烦,并且不介意一点联合品牌,那么谷歌和必应都为你提供了免费的解决方案。

搜索框

使用谷歌自定义搜索,你可以在你的网站上放置一个搜索框,用户可以用它来查询你的网站信息。谷歌提供了一个界面,允许你在向用户显示这些结果时定制它们的外观和感觉。当然,免费版本的结果会显示我们已经习惯看到的谷歌广告,但你可以支付少量费用来移除这些广告。

API

谷歌和微软都提供了将搜索引擎功能嵌入到你的网站中的应用编程接口。与谷歌自定义搜索搜索框不同,您需要编写一些脏代码,因为该功能是通过 RESTful HTTP 服务提供的。

与谷歌定制搜索一样,这些服务是免费提供的,象征性使用,但一旦你清除了某个搜索阈值,你将需要为继续使用该服务付费。

Lucene.NET

如果你想把全文搜索嵌入到你的应用中,但又不想通过广告来推广(或者你只是不想花钱让别人帮你做),你可能想看看 Lucene.NET。Lucene.NET 是流行的基于 Java 的搜索引擎 Lucene 的一个端口。和 Lucene 一样,Lucene.NET 也是 Apache 软件基金会产品的一部分,并根据 Apache 许可证获得许可。

Lucene.NET 采用文件和索引的概念。索引保存了可供搜索的文档集合。每个文档都是键值对的集合。索引可以在内存或文件系统中构建和维护。

Lucene.NET 的真正好处是它可以被绑定部署。这意味着无需安装任何软件,只需在部署时将程序集与应用捆绑在一起,您就可以轻松获得全文搜索支持。如果您的主机提供商不支持微软 SQL Server 内置的全文功能,这使得 Lucene.NET 成为一个理想的选择。

SQL Server 全文搜索

在微软栈上操作,你可能倾向于使用 SQL Server 的全文搜索 ( SQL FTS )功能。 SQL FTS 功能特别强大,可以根据变调、语言变体(复数、时态等)或邻近性来搜索内容。

SQL FTS 不是基于文档创建索引,而是将表用作索引源,并基于创建 FTS 索引时指定的一列或多列填充索引。这些列可以是传统的基于文本的列,如 char、varchar 和 nvarchar,也可以是 image、xml 或 varbinary(MAX)类型的列。

SQL FTS 甚至可以实现内容感知。这意味着,如果您将一个 Word 文档放在 varbinary (MAX)列中,SQL FTS 足够聪明,可以解析出文档的内容,并将其包含在根据索引进行的搜索结果中。

使用 SQL FTS 的唯一缺点是找不到支持它的托管提供商。如果您自行托管 SQL Server,则需要获得支持您的使用场景的许可证。

在我们的应用中,还有其他选项可用于执行全文搜索,如果您找到一个更适合您需求的选项,那么您应该使用它。不管技术如何,接受这个挑战,在你的应用中实现全文搜索。

社会化

如果我们创建了我们网站的高级功能列表,我们会看到用户可以登录,创建食谱,提供评论,向他们的库中添加项目,就这样。我们可以为用户和我们的用户做比现在更多的事情。如果我们想要一个真正的社交网站,我们需要与我们的用户互动,让他们彼此互动。

为此,您面临的挑战是让您的用户使用以下一种或多种方法参与酿酒社区。

社交媒体支持

显然,如果我们要社交化 BrewHow,我们需要增加对现有社交媒体的支持。这包括对脸书、推特和谷歌+等社交网站的支持。利用这些社交平台,我们可以通知用户我们网站上的活动,并让他们通知其他人他们的活动。

配方添加

为了向您的用户和您网站的潜在用户告知新的食谱添加,您可以在推特上发布食谱添加,并提供返回您网站的链接来查看食谱。请记住,该网站支持匿名访问,因此任何人都可以阅读目前的食谱。

你也可以选择向脸书或谷歌+发布食谱添加,但请注意,这些媒体渠道不太能接受噪音,在开始时,你可能不想每次有人添加食谱时都向这些服务发布消息。

食谱分享

您的用户可能会想要分享他们已经制作、打算制作、已经创造的食谱,或者只是简单地觉得有趣。允许他们将这些信息分享给现有的社交服务会给你的网站带来流量,并帮助建立食谱库和社区。

你应该允许用户将食谱从网站直接推送到他们的推特账户,使用他们的脸书账户推送到 Like 食谱,或者使用他们的 Google+账户推送到+1 食谱,从而实现食谱的共享。

离线支持

有次,你的用户可能无法获得良好的互联网连接。也许他们在当地的酿酒供应店没有覆盖面。也许他们想在平板电脑上保存食谱,而平板电脑只配备了 WiFi。不管什么原因,你应该支持你的用户离线存储食谱的能力。

存在几种服务来支持网络内容的离线访问。其中最受欢迎的两个,口袋和 Instapaper,可以直接放在你的网站上,让你的用户直接发布食谱给他们选择的离线读者。这些服务还允许用户与朋友共享他们保存的离线版本。如果您提供了适当的布局,您可以使用内容的离线版本将用户带到您的站点。

推送通知

signor 目前用于向查看配方列表的所有用户发布新配方,而不管用户对发布的配方是否感兴趣。虽然这是您应该保留的功能,但如果只通知用户他们可能感兴趣的食谱,它可能对用户更有用。

应该允许用户保留允许他们订阅通知的配置文件。这些通知可能是关于对他们创建的食谱的评论,或者是关于添加某些风格的食谱。无论通知是什么,您都可以使用 SignalR 来模拟开发本地移动应用时可用的推送通知。

当然,用户必须查看网站才能收到这些通知。如果你真的想启用推送通知,你必须开发一个本地应用。

土生土长

有些事情是移动网络应用做不到的(目前)。正是在我们需要运行硬件的能力,不受浏览器限制的情况下,我们必须将我们的应用原生化。

如果您决定将 BrewHow 作为本机应用公开,您将需要向远程调用方提供对您平台的访问。在 ASP.NET MVC 4 中,我们最方便的方法是通过网络应用编程接口。

ASP.NET 网页空气污染指数

ASP.NET 网络应用编程接口框架使得构建 RESTful 服务和通过 HTTP 公开这些服务变得简单。这些服务自动使用与我们在本书前面学习的相同的模型绑定技术,并且可以使用 XML 或 JSON 接受和返回请求。

鉴于 HTTP 无处不在,并且 XML 和 JSON 可以在所有主要的移动平台上解析,ASP.NET 网络应用编程接口非常适合您向外部消费者公开您的平台。当然,您可以选择其他路径来公开您的应用以供使用。

请注意,您将希望保护应用编程接口的安全,以防止恶意用户识别您的端点并试图在您的站点中发现漏洞。而且,如果我是实现这个功能的人,我会确保控制器和服务只是执行实际工作的代码的包装器。你不会想在两个地方维持你的逻辑。

开发原生应用

当开发你的原生应用时,你可以用 Java 编写一个安卓应用,用 Objective-C 编写一个 iOS 应用,希望你有时间和耐心给你的用户提供几乎相同的体验,或者你可以利用现有的工具让你维护一组源代码。目前市场上有几种跨平台开发工具。

PhoneGap 和 Appcelerator

PhoneGap(phonegap.com)和 Appcelerator(appcelerator.com)提供了开发工具和框架,允许您从单个代码库中瞄准多个平台。虽然您必须学习框架本身,但这两种工具都允许您用您已经熟悉的语言开发代码,例如 HTML、CSS 和 JavaScript。

这些框架确实有其利弊,为某些硬件级特性提供了有限的支持。但是对于你想要完成的 90%的工作来说,它们已经足够了。还要记住,这些框架每天都在改进,应该很快就会达到与原生开发工具相当的水平。

如果你想成为本地人,不想学习新的框架、语言或两者兼而有之,还是有希望的。

绢毛虫

Xamarin 在我处理跨平台开发工具的经验中是独一无二的。它为您提供对原生硬件的访问,但要求您拥有或获得底层移动操作系统如何工作的知识。这听起来可能令人生畏,但你必须具备这方面的知识,因为 Xamarin 所做的就是允许你使用 C#瞄准自己选择的移动平台。

现在编写代码,知道 iOS 和 Android 在幕后做什么,这确实意味着你的应用的外壳必须特定于一个平台,但是我们了解到,通过良好的关注点分离,我们的逻辑可以独立于任何呈现机制而存在于外部。Xamarin 将允许你用你熟悉的语言编写你所有的移动端业务逻辑,让你专注于你试图解决的问题。

总结

每当我坐下来研究一个框架的新特性或一个旧的已建立特性的细微差别时,我发现我学到了一些新的东西。作为开发人员,如果我们想保持最新,我们必须接受这个学习过程。这就是为什么我以这一系列挑战来结束这本书。我希望你,读者,继续你的追求,更多地了解你的手艺。这就是我选择写这本书的原因,也是我希望你正在读这本书的原因。

这是一段漫长的旅程,我在本章的导言中已经很好地总结了这段旅程。最后,我希望我能够传达使用 ASP.NET MVC 4 框架开发移动应用有多大的潜力。