第1章 项目介绍——TheBeerHouse
本章介绍的是在本书中要开发的一个项目。将解释该示例网站所涉及到的概念。在阅读过程中,读者应当意识到这是一种多功能的、数据驱动的、基于内容模式的网站,而且可以方便地修改该网站以满足实际需求。虽然本书中会使用许多ASP.NET旧的功能,但**还是介绍如何在实际网站开发过程中使用ASP.NET 2.0的强大功能。
本书的每一章都使用“提出问题一设计方案一解决方案”的方法进行讲述:“提出问题”部分提出每章所要完成的模块的业务需求,“设计方���”部分开发符合这些需求的解决方案,“解决方案”部分编写代码来实现设计方案。与传统的计算机书籍不一样,本书并没有**介绍基本概念,而是着重展示如何应用学到的知识来解决实际的业务需求。本书可能并不适合初学者,如果您对网站开发的基本概念和ASP.NET(任何版本的ASP.NET)已经有所了解,并已经实践过,而且您想学习ASP.NET 2.0中的新知识,那么我们开始吧!
1.1 提出问题
在博洛尼亚(意大利的一个城市)有将近一半的人口是学生,包括许多留学生。由于年轻人很多,所以这里有很多酒吧和娱乐场所,能够让他们在晚上和**一起出来活动。音乐会、聚会、表演秀等活动经常举办。为了具有竞争力,每个酒吧必须找到一些其他酒吧所没有的、能够吸引潜在顾客的特色。要有竞争力,营销也非常重要,我们的一个客户希望在这一方面做得更强。该客户原来一直使用传统印刷广告来宣传她的酒吧TheBeerHouse(一个虚构名字),但现在想尝试新的媒体方式——创建一个令人兴奋的网站。她认为这很有用,因为顾客一旦熟悉了她的网站就可以去那里看*新活动的报道;通过邮箱接收新闻邮件;可以浏览过去活动的照片,对它们进行排名;还能同网站的其他访问者分享信息、建立联系,而且日后他们还能在酒吧里当面进行交流。建立网站的目的就是吸引顾客,尤其是使目标顾客习惯于通过网站来获得新闻和活动的信息。酒吧是典型的娱乐场所,拥有很多顾客,它可能要比传统的酒店更需要这样的网站。
1.2 设计方案
每章的“设计方案”部分对该章提出的问题进行讨论,然后设计解决方案。这意味着需要记录一系列业务需求、项目需要实现的功能、用于数据存储的必要数据库对象的设计,以及用于获取数据、处理数据和向用户展示数据的类的结构。在项目的开始阶段要考虑用户有何需求,以及怎样来处理这些需求,在时间和预算允许的条件下尽量扩展需求,使用户能在此基础上获得更多的功能。正如“提出问题”部分所述,在本书场景中,我们的客户拥有一个酒吧,她希望建立一个网站来推广她的酒吧,该网站上将提供*新活动的预告信息、已结束活动的报道等。有很多方法可以对这些设想进行扩展,这样就可以创建一个内容丰富的网站,这对酒吧主人和顾客(也可以是潜在顾客)都有好处。项目开始时,我们先列出了当今基于内容的网站所应具有的功能:
·一个吸引人的用户界面。外观很重要,因为用户首先会注意界面,然后才关注网站的功能和服务。但用户界面不能完全靠图片解决问题,应当合理地组织网站上的信息,使用户可以方便地获得所需的信息。网站应当符合用户的使用习惯,即用户可以很方便地浏览,方便地进行交互。要注意跨浏览器的兼容性,例如:要保证网站在不同的平台上和浏览器中都可以正常显示和操作。如果无法预知用户会使用何种浏览器来访问网站,那么这尤为重要。
·一个成功的内容网站会在它的用户中有很好的声望。忠诚的用户会经常访问网站来发帖子、参加投票或其他活动,正是他们才使得网站保持增长。要为这些积极的会员创建一个有活力的社区,需要把他们同其他普通会员区别开来。因此,网站需要一个注册功能,作为身份认证的一个基础部分,该功能也将用于授权以及限制访问网站中的某些页面。
·网站需要不断更新以保持活力,如果内容一成不变,那么访问者就会对该网站失去兴趣而不再访问了。一个酒吧的网站应当定期更新活动、聚会和音乐会的预告信息,否则网站不会成功。试想用户在浏览网站时看不到上次聚会时拍的照片会有何反应?要实现内容的不断更新,就需要一些方法,能让网站编辑人员方便地更新动态内容。而且,负责网站内容更新的编辑人员很可能不是技术人员,因此应当创建一些简单的管理页面,这样非技术人员也可以通过这些页面方便地对网站进行内容更新。
·当网站上有了新内容之后,网站管理员应当想办法来提醒用户。并非所有的用户每天都访问该网站,因此管理员应当主动提示用户有关近期的更新。如果用户已经在网站注册过,并提供了Email地址,那么也可以通过邮件使他们获得网站的更新以及其他内容。当然,还有很多其他的方法能够提供这些信息,例如:提供真正简单的整合(Really Simple Syndication,RSS),这样,用户注册后就可以使用RSS阅读器自动获得新闻通知,无需每天访问网站来获得信息了。
·像这样的网站*适合进行一些顾客问卷调查。例如:顾客在酒吧中*喜欢什么?他们喜欢什么牌子的啤酒?与朋友一起喝酒时是否想听音乐或是否觉得酒吧太过于吵闹等。建立一些用户与网站之间的沟通是很重要的,如果能得到相当数量的反馈信息,那么这些信息将引导管理者做出正确的战略决策和改变,从而提高经营状况。
·如果说用户与网站之间的沟通是很重要的话,那么用户与用户之间的交流则更加重要,这是为用户建立社区的主要目的。他们经常访问网站进行聊天,并讨论网 站上的新闻,针对即将举行的活动向其他用户咨询建议。这些都能为网站带来更多的访问量,让网站无论在短期还是在长期运营中都能获得回报。
·商店有了一定顾客基础以后,店主就可以对它进行扩展来实现在线销售。事实上,酒吧已经为啤酒爱好者提供了一系列商品,像杯子、T恤、钥匙链等。网站的访问量高了,也是提高商品销售的一个好办法,因为顾客可以不用到酒吧就能购买这些商品。如果用户看到自己喜欢的商品可以对它进行投票排名,从而让其他用户知道自己对该商品的感受。在线商店应当能够方便地由非技术人员进行管理,因为很可能是该酒吧主人亲自添加、修改商品信息和进行定单管理的。因此,网站应有一个操作简单明了的用户界面,它能够自动完成尽量多的操作,并且引导用户在整个过程中进行操作。
·由于网站上提供新闻、文章、商品列表、用户讨论等动态内容,因此可以想象网站主页会变得很拥挤。太多的信息可能会造成阅读困难,引起误解。如果访问者能够根据自己的爱好亲自构建属于自己的主页那就再好不过了。他可能想看活动预告而不关心在线商店,很好!我们将为他提供这样的功能,他可以在自己的主页上对内容进行添加和删除,也可以将内容进行移动,使内容重新排列,这样浏览者阅读起来会更舒服并且容易获得有用的信息。许多大型网站都提供了这种自定义功能,像Windows Live及My MSN都是非常好的示例,自定义功能能够帮助网站吸引更多的用户进行注册。
·前面已经提到,酒吧的客人会来自很多不同的**,我们希望不同**的人所访问到的网站是一致的,因此,网站应当全部或者部分地翻译成多种语言,让大部分用户都能容易理解。不仅文本需要翻译,像日期格式和数字格式这样的信息也应当根据用户的本地设置进行显示,这样就不会有人把即将举行的聚会或者活动的时间看错。
综上所述,TheBeerHouse网站将拥有当今内容网站的全部功能,包括动态文章和新闻、问卷调查、论坛、邮件列表、RSS、在线购物、个性化主页以及内容本地化。通过构建示例网站,可以学习构建当今大多数内容网站和商务网站所包含的主要功能,在将来开发网站时会用到它们。
1.3 解决方案
每章的“解决方案”部分包含了设计步骤和实际代码,用于实现前面两个部分中所提出的功能、需求以及设计。下面概述以后各章所要讲述的内容。
在第2章中,将实现网站的设计、图形,以及布局。通过使用Master Page——ASP.NET2.0中的一个新功能,能够让布局在网站的所有页面之间共享。还可以使用“主题”——ASENET 2.0的另外一个新功能,为Master Page创建一系列不同的外观。这样就可以创建一种机制使访问者可以从下拉列表中选择自己喜欢的主题,根据自己的喜好来改变网站的色彩和外观,甚至能够避免视觉障碍。*后通过新的web.sitemap文件以及Menu和SiteMapPath控件来创建一个灵活且易于维护的导航系统。
第3章将为构建一个灵活的、容易配置的功能网站打基础。首先,需要一个插入式的数据访问层(Data Access Layer,DAL),DAL可以支持任何类型的数据存储,有良好的扩展性,在高使用量中有很好的表现。然后在DAL的上面构建一个业务逻辑层,使得数据以面向对象的方式展示。逻辑层还包含了所必需的验证逻辑、事务管理、事件曰志以及高速缓存。*后,介绍用户界面(UI)和表示层,它们利用新的GridView、DetailsView和FormView控件,并结合ObjectDataSource可以快速生成功能强大且由数据驱动的复杂页面。
在第4章中,将把ASP.NET 2.0中新的成员功能整合到网站中,以生成用户注册表单,并且支持用户的身份验证和授权。本章将介绍新的Profile模块,它允许定义用户级别的属性,该属性的值可以持久保存。这与传统的Session状态变量有很大的区别,Session状态变量只存在于用户浏览网站期间。我们将要构建一个完整的管理模块,它允许管理员查看成员列表,限制那些在网站上有恶劣行为的成员,查看和编辑每个用户的详细资料。
在第5章中,将构建一种内容管理系统,这个模块为管理员提供了一个直观的界面来管理网站中的文章,非技术用户也可以使用它。该模块内置了一个成员系统来确保模块只对有权限的人员开放,并跟踪文章作者的*新动态。该模块可以对全部分类或指定分类中的新内容进行汇集而发布一个RSS源,同时还支持排名和评论等其他许多功能。这些功能很强大,网站编辑人员只要事先准备好格式丰富的内容,并且设置好内容自动发布和删除的时间,网站就会自动完成更新,这样网站的更新就变得非常简单,只需要很少的操作和时间。本章*后将描述新的GridView、DetailsView和ObjectDataSource控件,通过使用这些控件,可以将面向对象业务类中的数据同用户界面进行绑定,业务类所包含的数据来自数据访问层。
在第6章中,将讨论如何在网站上创建和管理调查问卷。此模块提供了一个管理控制台,用于通过Web浏览器来管理投票。还提供了一个用户控件,只需要几行代码就可以把一个调查问卷插入到任何页面中,同时还包括了一个历史页面,可以在该页面上查看所有的历史投票记录。
在第7章中,将为网站增加一个完整的邮件列表模块,用于向那些注册了详细个人资料的用户发送新闻邮件。邮件是通过后台线程发送的,没有使用处理页面请求的主线程,这样页面不会产生超时,更重要的是,网站编辑人员不会碰到那种好几分钟看到的都是空白页面的情况。使用异步JavaScript及XML编程技术(Asynchronous JavaScript and XMLProgramming,AJAX)可以实现页面部分更新,提供新闻的实时更新。用户能够在一个归档页面中看到过去的新闻邮件列表。要实现所有这些功能,需要使用一些ASENET 2.0的**功能,例如多线程编程、新的脚本回调功能以及新的邮件发送类。
在第8章中,将创建一个论坛系统,该系统支持多个子论坛,有合适的可选项,可以对主题和回复进行分页列表显示,可以用不同方式进行排序,并且支持标准RSS,可以配置用户排名,支持签名档、引用以及当今大多数论坛的主要功能。该论坛系统还提供了完整的管理功能(删除、编辑、批准、移动、关闭主题和帖子)。
在第9章中,将为网站添加一个在线商店。它具有在线商店所必要的功能,包括完整的商品分类和定单管理系统、购物车、使用信用卡在线支付的功能、商品排名、商品库存状态、使用文本和图片对商品进行描述、配置送货方式、查看定单状态等。
……