摘要:针对传统投票方式的不足, 进行了在线投票系统的设计与开发, 便于信息处理以及统计管理。ASP.NET和MVC模式结合使得各层次间耦合性降低, 在满足用户需求的同时使得系统具有结构清晰、易维护和可扩展性强等特点。
关键词:Web开发; 投票系统; MVC; ASP.NET; 数据库;
Abstract:Against the weak points of traditional voting methods, the design and development of an online voting system is described, which does good to better information processing and statistical management.The combination of ASP.NET and MVC mode reduce the coupling of levels, and meet the needs of users while taking into account clear frame, strong maintainability and scalability and so on.
Keyword:Web development; voting system; MVC; ASP.NET; database;
ASP.NET是基于.NET Framework的Web开发平台, 不同于过去开发动态网页需要编写大量繁杂的C代码, ASP使用的是简单的脚本语言, 代码可直接嵌入HTML, 摒弃了传统的.NET应用开发存在的扩展性差、代码冗余和复用性差等缺点。MVC (Model-View-Controller) 模式用一种业务逻辑、数据及界面显示分离的方法组织代码, 使得项目整体结构清晰, 为大型的Web应用提供了良好的模型结构。在ASP.NET平台上, 控制器通过C#在后台实现数据处理的逻辑部分, 模型对应操作的实体, 视图体现为前端的.aspx页面。
投票在日常生活中随处可见, 大到各种职位选举, 小到选择喜好的物品。目前国内有很多基于ASP.NET的投票系统, 但大多数采用的是非MVC的结构, 页面内容与数据处理逻辑混合, 既不利于大型项目的开发, 也难以满足用户的需求变化。因此, 本文作者设计了一套结合ASP.NET和MVC的在线投票系统。该系统整体结构设计合理、交互性好、操作方便。用户有关投票主题的所有操作包括评论等, 都会通过互联网提交到投票信息数据库, 管理员登录即可查看或统计当前数据库中的投票结果, 由此使创建主题、正式投票和得票统计分析等一系列过程变得规范化, 提高了整个投票程序的效率。
1、MVC设计模式及其优点
目前, 通用的软件体系架构包括多层分布式模式、层次模式以及MVC模式等。鉴于MVC的各部分可独立测试, 且结构更为清晰, 本系统选用了MVC架构模式。
视图:通过用户交互界面显示来自于模型的数据, 控制器对模型进行引用, 然后对视图内容加以更新, 即视图只是处于数据的展示层, 不涉及任何有关数据处理的逻辑部分。一般用HTML语言实现, 也可用XML、XHTML等, 随应用程序的设计要求和复杂度不同而变化。多个视图可能对应同一模型。
模型:进行数据加工、业务流程的处理以及业务逻辑规则的制定, 并在应用程序的问题域中实现这些流程和规则。模型最大的特点是可重用性高, 同时将数据对象独立整合, 一个模型可多次使用。在ASP.NET中, 模型一般体现为类 (Class) , 它封装了相关的属性和操作, 对外表现为一个整体, 对用户透明, 同时独立于其他功能模块。
控制器:与模型 (Model) 一起工作, 共同完成用户的请求, 最终选择一个视图 (View) 来显示用户交互页面。控制器本身并不对数据进行处理, 它是介于视图和控制器的中间层。
基于MVC的设计方式使得UI界面与实际处理程序分隔, 避免了代码结构的混乱, 在实现过程中也可使开发人员独立地完成各部分内容, 从而减少了相互干扰的可能性, 提高了开发效率。MVC的主要优点如下:
(1) 易于维护[1]:项目结构规范, 界面和后台业务逻辑代码处于不同结构中, 维护成本低。
(2) 易于移植:因为开发平台众多, 代码的可移植性显得越发重要。MVC中的模型独立于视图, 可被移植到新的平台, 只需要在新的平台上对控制器和视图加以修改即可。
(3) 自动刷新:视图显示的是来自于模型的数据, 且一个模型一般对应多个视图。当模型内容发生改变时, 视图可自动刷新, 因而系统可更新性好, 避免了一处修改引起整个系统结构改变的现象。
(4) 可扩展性强:在系统设计初期, 对于功能的考虑难免不完善。需要增加新类时, MVC的明显优势在于只需添加新的模型, 由此衍生出相应功能的控制器和视图, 丝毫不会影响到已有代码的完整性。
(5) 可分工性好:目前已出现了很多代码托管平台, 为项目合作提供了极大便利。在MVC模式开发过程中, 控制器、视图和模型可分别交由不同成员, 各自独立完成, 在进行合并时能减少冲突的发生。
总之, MVC较之于传统的Web Form形式可能较为复杂, 但鉴于其诸多优点, 却是大型Web应用开发首选的架构, 前期搭建好基本结构后, 后期过程就会容易很多。
2、系统设计
本投票系统是一个基于B/S结构的Web应用。系统主要功能有查看投票主题详情, 添加、编辑、删除投票主题, 添加、编辑、删除投票选项, 在线投票, 用户评论, 对投票主题进行热度排行等。同时, 一个投票主题下有多个选项, 可设置单选或多选。
本系统的开发目标是摒弃传统投票方式选项个数受限制、统计困难以及不利于分析得票情况等弊端, 将投票与Web程序相结合, 以提供更便捷高效的方式, 带来良好的用户体验。开发环境采用Visual Studio2013, 后台数据库采用My SQL Server 5.7.12。
2.1、系统架构
基于MVC模式, 本投票系统整体架构如图1所示。系统分为客户层、业务逻辑层和数据层。客户层在浏览器中运行, 角色分为管理员和用户, 其操作结果被提交到业务逻辑层后, 业务逻辑层负责控制器、模型和视图三者间的数据流通[2], 同时通过ADO.NET[3]对数据库进行更新。
图1 系统架构图
2.2、功能模块
考虑到使用者的需求, 本系统功能模块按照用户和管理员进行划分, 如图2和图3所示。
图2 用户模块
图3 管理员模块
各模块简介如下:
(1) 用户模块
搜索主题:对任何一个完整的系统而言, 搜索功能都是至关重要的。由于投票主题类型众多, 本系统设置了搜索栏, 供用户输入自己感兴趣的关键词进行查询, 然后点击进入目标主题进行投票。
查看最热主题:基于大数据的思想, 系统主页展示了当前热度最高的部分主题, 其参与量最多。本功能让每个用户都能了解投票平台上最受欢迎的主题情况。
查看最新评论:参照众多社交平台的互动方式, 系统主页显示最新的部分评论, 拉近了用户之间的距离。
投票及评论:本功能无疑是用户模块的核心, 根据投票主题属性不同, 用户可进行单选或多选。投票完成可在主题下方评论区发表个人意见。
(2) 管理员模块:
显示主题:管理员登录后可查看所有已发布的主题 (包括已截止的主题) , 并对每个主题都有编辑、明细和删除三种操作权限。
添加主题:本模块是发布投票主题的入口, 点击“添加主题”后可在新的页面写入主题名称、选择状态 (单选或多选) 、投票状态 (投票中或已截止) 和每个选项内容。
编辑主题:主题已经发布后, 本模块提供编辑功能。可在本模块进行的操作有添加选项、编辑选项和删除选项, 比起传统的投票方式, 此项设置更具有可扩展性。
主题明细:点击明细可查看有关此投票主题的所有信息, 包括主题名称、投票状态、选择状态、所有选项及对应的票数。
删除主题:本模块提供投票主题的删除功能, 进行删除后, 数据库中有关该主题和有关选项的条目都不复存在。
3、系统实现
3.1、Mode l实现
Model对象实质为实体类, 既不直接处理客户端请求, 也不直接输出数据[4]。本系统采用Code First[5]技术, 该技术支持在还没有建立数据库的情况下就开始编码, 即先在程序中建立要映射到数据库的实体结构, 然后EF (Entity Framework) [5]根据实体结构生成所对应的数据库。
在本投票系统中, 主要的Model及其属性关系如图4所示, 按图4中从左至右, 从上至下的顺序列举为:主题 (Theme) 、选项 (Option) 、用户 (User) 、最热主题-最新评论 (Index Model) 、评论 (Remark) 、登录状态 (Msg) 、主题-选项-评论 (Big Model) 。其中, Theme、Option、User、Remark这四个模型类分别与本系统数据库中的表一一对应, Index Model、Big Model的属性由这四个基本Model中部分Model的List集合组合而成, Msg模型类包含User模型类中除password以外的所有属性。
图4 模型属性关系图
3.2、控制器实现
控制器是连接模型和视图的桥梁。一个控制器由多个Action组成, 每个Action负责接收用户的HTTP请求并选择返回的页面。当需要对数据库信息进行修改时, 需要有两个同名的Action方法, 一个仅负责进行基本的页面返回, 另一个进行数据库相关操作的处理。
本系统的控制器有三个:User Controller、ManagerController和Account Controller。前两者分别对应用户和管理员功能模块, Account Controller主要负责主页的注册、登录模块。以Manager Controller中创建主题功能为例, 实现流程如图5所示:
图5 创建主题流程图
3.3、视图实现
视图是进行数据显示和用户交互的窗口。本系统的视图页面使用Razor语法和HTML标签进行编写。当控制器回传View Result给Mvc Handler之后, Mvc Handler会先设法找到对应的页面view, 被找到的razor页面会优先执行, 执行完毕后, 会判断该view页面是否含有主版页面所需要的Layout属性, 如果是, 则试图载入Layout属性指定的Razor主版页面, 载入主版页面后, 便开始将内容响应给客户端。主版页面可包括系统菜单栏以及注册、登录的入口等基本版块。
本系统的用户角色视图有Index.cshtml、Search Result.cshtml、Details.cshtml, 分别为用户主页、搜索结果页面、主题详情页面, 管理员角色视图有Show.cshtml、Create.cshtml、Details.cshtml、Delete.cshtml、Edit.cshtml, 分别为管理员主页, 创建主题页面, 主题详情页面, 删除主题页面, 编辑主题页面等。
3.4、界面示例
部分界面如图6、图7所示。
图6 用户-主题详情页
图7 管理员主页
4、结束语
本文描述了一套基于ASP.NET MVC模式的在线投票系统的设计与实现, 弥补了传统投票方式的不足。相比于Web Form模式, 本系统各层次间耦合性更低, 增强了代码的灵活性, 更能满足用户的需求变化。
参考文献
[1]黄保翕.ASP.NET MVC4开发指南[M].北京:清华大学出版社, 2013.
[2]龚薇华, 王晨光, 俞欢军.基于MVC模式和.NET的公司内部管理信息系统设计[J].计算机工程与设计, 2007, 28 (9) :2142-2144.
[3]Stephen Worley.ASP.NET技术内幕[M].北京:机械工业出版社, 2002.
[4]陈辉, 丁春莉, 孙悦.ASP.NET MVC软件架构模式在学生实训管理系统的应用[J].电子设计工程, 2015, 23 (13) :11-14.
[5]Roger Jennings.ADO.NET 3.5高级编程:应用LINQ&Entity Framework[M].北京:清华大学出版社.2010.