1. 引言
随着社会的高速发展,智能手机在人们的日常应用场景中出现的频率几乎达到了百分之百,而其中装载的移动应用的应用范围也越来越广泛。比如近些年来异常火爆的共享模式,把它植入到广泛应用的Android平台上无疑是更适合发挥的舞台。目前在Android平台上有很多的具有共享功能的APP [1] [2] [3],而共享写作平台这样的APP确较少出现。
现有的多人共同写作多是协同写作 [4] [5] [6],它更趋向于具有计划性的同时间共同完成创作,这些计划可以由一位负责人,也可以没人负责。有负责人的情况下协同写作的作品可以采用统一格式,多人分别完成。若没有负责人,那么该作品在格式或内容上比较自由,脉络比较模糊。本文提出的共享写作 [7] 的“共享”体现在作者的构思、创作与创作乐趣上的共享。它是在一个作者给出的固定序章下进行接续的写作创作。如此既可以保证作品的一致性以及能为读者呈现一个相对明晰完整的脉络,又可以共同付出并共同享受双方或多方的付出为自己带来的便利,还可以让读者参与进来,激发更多的灵感,创作出更曲折的故事情节和开放的结局。
2. 共享写作平台的整体功能设计
将共享这个概念融入写作中可以让写作的过程对于作者们与读者们更有参与度。作为一个写作平台应具备基本的市面上常见的一些写作软件的功能,而且应该具备类似漫画或者小说平台的面对所有用户的观看与用户观感反馈系统。界面上给用户的感觉应该是简洁明了的,简约的界面风格,这样能让用户在使用平台的过程中有更加舒适和更加快速便捷的使用体验。而对于共享部分的体验,需要让作者和合作者之间存在分享写作权限的功能,以及作者和读者可以通过评论、添加收藏等互动,以达成对于小段式分段写作的反馈,并可以影响到作品的后续的发展。具体功能如图1所示。
3. 共享写作平台的设计及实现
基于Android的共享写作平台是为了让读者和作者都方便使用的一个APP平台,它应具备以下功能:注册与登录、创建书籍与章节、共享章节创作权限、搜索书籍、喜爱与评论、查看排行、书籍分类、收藏夹管理。具体可以分为客户端和后台服务端分别来设计。
3.1. 客户端的设计及实现
首先用户可以进行注册、登录操作,可以注册为作者或者读者,也可以二者兼具。登录后作为作者可以进行创建书籍和对应书籍内创建章节的操作。另外作者可将所选定的自己的书籍内章节创作权限分享给其他作者,其他作者可以根据自己的兴趣和推理进行作品的续写。一般读者可通过搜索名称搜寻感兴趣的书籍,也可以收藏和评论自己喜欢的作品;还可以查看排行来找到人气较高的作品。另外读者可通过类别来找到自己感兴趣的对应作品,也可通过收藏夹查看自己收藏的书籍并可取消对于书籍的收藏。
将用户的功能画成用例图如图2所示。

Figure 1. Shared writing platform function module diagram
图1. 共享写作平台功能模块图
以创建书籍、章节,共享写作权限为例,看一下功能如何实现的。
1) 创建书籍功能的设计实现
创建书籍时,除了可以输入书籍名称之外,还可以选择所属作品分类,上传书的封面图片等,方便吸引读者进入阅读,如图3所示。其代码如下:
@RequestMapping(value = /addbook,
method = RequestMethod.POST)
public BaseBean
addbook(
@RequestParam(file) MultipartFile file, HttpServletRequest request) {
String uid = request.getParameter(uid);
String tid = request.getParameter(tid);
String name = request.getParameter(name);
String info = request.getParameter(info);
String gg = request.getParameter(gg);
BookBean bean = new BookBean();
bean.setGonggao(gg);
bean.setInfo(info);
bean.setName(name);
bean.setSum(0);
bean.setTid(Long.parseLong(tid));
bean.setUid(Long.parseLong(uid));
bean.setTime(new Date().getTime());
bean.setStatus(0); }
2) 创建章节功能的设计实现
创建了书籍后可以新增章节,系统默认根据序号给出“第X话”的标题,也可以进行修改。作者可以上传相应的合成音阅读文章的音频文件给读者更佳的阅读体验,也可以直接上传书籍图片,在进行图片裁剪后作为章节内容,一章节内支持多张图片的上传。此处针对的创作可以不仅仅是文章,也可以是漫画等作品,所以应用了图片上传功能。最后将数据保存在数据库中,其中图片和音频文件会保存在项目设置的相应uploaddir目录内,文件的文件名上存在用户上传时间的对应时间戳。时间戳数据会由服务端从数据库提取并发送到客户端,再经由客户端的时间转换工具类转换为正常的时间格式显示在客户端的相应位置,如图4所示。
章节新增功能部分代码示例:
@RequestMapping(value = /addpage, method = RequestMethod.POST)
public BaseBean
addpage(@RequestParam(file) MultipartFile[] file,
@RequestParam(mp3) MultipartFile mp3, HttpServletRequest request)
{ String bid = request.getParameter(bid);
String name = request.getParameter(name);
String theindex =
request.getParameter(theindex);
BookPageBean bean = new BookPageBean();
bean.setBid(Long.parseLong(bid));
bean.setName(name);
bean.setTheIndex(Integer.parseInt(theindex));
bean.setTime(new Date().getTime());
bean.setMp3();
bean.setStatus(0);
3) 共享写作权限功能的设计实现
用户在自己创作的书籍章节页面选中要分享的章节,点击页面右上角“共享”字样跳转而来,如图5(a)所示。勾选想要分享给权限的其他用户,并点击右上角的“确认”,如图5(b)所示,该被选中用户的“我的作品”页面中会出现被分享的作品。原作者可以共享给多个合作者以创作权限,最终原作者可以选择其中创作较好者作为自己作品的续写。原作者也可以提供开放结局,由读者选择读者最喜欢的创作作为原作品的续写。
(a) 选择待分享章节
(b) 分享创作权限给作者
Figure 5. Share creation permission page
图5. 分享创作权限页面
实现原理是通过管理所有bean的Basebean基类创建一个目前可被分享章节创作权限的用户的list,首先获取当前书籍id和用户id,在目前系统中所有的用户中进行判断逻辑,获取正常用户(未被禁用)列表,进行勾选并点击“确认”,赋予被勾选的用户所共享的书籍的章节创作权限。并将状态信息更新至数据库。给用户分享章节创建权限关键代码示例:
@RequestMapping(value = /bookshareuserlist, method = RequestMethod.GET)
public BaseBean
> bookshareuserlist(HttpServletRequest request) {
String bid = request.getParameter(bid);
String uid = request.getParameter(uid);
List
shareList =
bookShareDao.ByBid(Long.parseLong(bid));
List
list = new ArrayList<>();
List
all = userDao.findAll();
for (UserBean userBean : all) {
if (userBean.getStatus() == 1 &&
!uid.equals(userBean.getId() + )) {
userBean.setStatusSelect(0);
for (bookShareBean : shareList) {
if (userBean.getId().equals(
bookShareBean.getUid())){
userBean.setStatusSelect(1); break;}}
list.add(userBean); } }
return ResultUtils.resultSucceed(list);
}
3.2. 服务端的设计及实现
服务端主要是管理员进行操作,管理员可以禁用用户或重新启用被禁用的用户,可以下架或重新上上架该用户的作品,还可以对书籍基本信息进行审核并决定是否通过审核,以及可以对章节基本信息进行审核并决定是否通过审核。具体服务端功能用例图如图6所示。
服务器端可以设计多个Controller来完成用户管理、书籍审核、章节审核等工作,具体控制结构设计如图7所示。

Figure 7. Control structure design of server
图7. 服务器端控制结构设计
设计控制器ApiController继承BaseController并通过对数据库进行相应操作并向客户端返回数据;设计控制器BaseController管理所有与Bean对应的数据访问层Dao;设计控制器PageController继承BaseController并通过对数据库进行相应操作,实现web后台管理的相关操作并向其返回数据;设计控制器PageLoginController通过对数据库进行相应操作,实现图登录页相关操作并向其返回数据。
3.3. 数据库的设计及实现
在该平台中,无论是用户、创作,还是评论、消息等都会涉及到数据库的存储。通过分析,可认为数据库将由用户信息、创作信息、评论信息、收藏信息等实体组成。具体关系如图8所示。

Figure 8. E-R diagram of database of shared writing platform
图8. 共享写作平台的数据库E-R图
其中admin_bean为管理员表,存储管理员信息。用户表user_bean中存储用户的用户名,昵称,头像文件的路径,密码,状态等信息。book_bean是书籍表,包括书籍简介,书籍的名称,书籍作者的昵称,书籍封面图片文件的路径,及书籍被浏览次数等。章节表book_page_bean中除了章节标题外还记录章节的状态及更新的时间。章节内容表book_page_img_bean中,章节内图片的序号,图片的路径,图片的数量,对应的音频文件的路径等都被记录下来。
4. 共享写作平台的功能测试
作者进入共享写作平台后,除了可以创建书籍、共享章节写作权限外,作者(读者)还可以查看排行、评论、分类阅读、收藏等,如图9所示。

Figure 9. Function page of ranking, comment, classification, collection
图9. 排行榜、评论、分类、收藏功能界面
平台还有许多其他功能,不再一一赘述。
5. 总结与展望
本文介绍了一个可以共享创作写书/读书平台,它和其他读书平台的不同点在于它增加了创作的多样性,激发作者的创作积极性及创作灵感,并给读者以参与感,从而吸引更多的用户浏览、使用、注册该平台。并且平台采用流行的Android平台下的APP的形式,既能方便用户的使用,又便于推广。
基金项目
促进高校分类发展——电子信息类(计算机技术)专业学位点建设项目资助。