我们的工作基本已经完成,今天主要回顾一下在主系统中我所做的工作:
在主系统中,我负责的是课程中知识内容模块的构建,在git中统计的总代码量为:
主要做的工作如下:
首先对Knowledge类的建模,Knowledge下分三大类知识:分别是专栏区(blog)、问题区(question)、和资源区(resource),其中,专栏区用来发布博客文章,需要教师进行审核、而问题区是大家交流学习的地方,无需审核、资源区用来上传文件资源,用于保存同学们的资料。
我在数据库层面采用单表继承的方式来存储数据:
数据库建表代码如下:
class CreateKnowledges < ActiveRecord::Migration[5.0]
def change
create_table :knowledges do |t|
t.integer :creator_id
t.integer :topic_id
t.string :title
t.string :type
t.string :content
t.string :attachment
t.string :knowledge_digest
t.integer :good,default: 0
t.integer :bad,default: 0
t.integer :visit_count,default: 0
t.integer :download_count,default: 0
t.timestamps
end
end
end
最终生成的schema表结构信息:
create_table "knowledges", force: :cascade do |t|
t.integer "user_id"
t.integer "knowledge_id"
t.string "title"
t.string "type"
t.string "content"
t.string "attachment"
t.string "knowledge_digest"
t.integer "good", default: 0
t.integer "bad", default: 0
t.integer "visit_count", default: 0
t.integer "download_count", default: 0
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.datetime "last_reply_at"
t.integer "check_state"
t.string "label"
t.text "content_digest"
t.integer "score", default: 0
t.integer "score_yesterday", default: 0
end
在主页中进入课程页面,就进入到了我负责完成的模块:
主页显示的是课程基本信息和简介,以及精品推荐,精品推荐是基于点赞数、浏览数等指标进行的排序。可以点击任一精品进入其中:
可以观看博客信息,同时有该文章的作者信息和其发布的知识信息列表,在主体部分,我们可以解析HTML代码,所以可以显示更加丰富的内容信息,比如图片等信息,其中的实现过程在前面博文中已经讲述。
文章底部是评论区域和该文章所属类别:
这篇文章的评论为空,我们找一篇有评论的如下:
点击查看更多就可以查看更多的博客内容,同时我没有采用直观的树形显示方式,而是参照知乎的实现方式,采用BFS算法在树中进行遍历,然后按照发布时间进行排序显示。
当然我们可以通过课程的主页进入不同的分区,观看该课程下的所有知识,如专栏区:
当我们想要评论时就会被导向登录界面:
当登录后,我们就可以重新进入课程模块界面:
可以看到已经登录,这时我们可以评论、或者点赞等操作:
左边按钮为点赞,当已经点赞后再次点击赞的话,就会取消点赞。同时在赞的情况下点击踩的话,也会变赞为踩:
同时也可以评论:
同时我们也可以评论回复,会出现评论成功的提示:
当用户想发布时点击发布按钮也可以进入发布界面:
然后进入发布界面:
书写标题、内容简介、并上传文件:
同时在文本内容输入框中是可以插入图片,点击插入图片,就可以插入图片,比如:
图片默认插入在尾部,拖动可以移动位置。
编辑完正文内容后,来到发布页面的最下部,输入标签(最多5个),选择分类、选择相关联课程:
点击发布就可以完成发布:
我们发布完成的资源,点击资源下载就会弹出对话框,完成下载:
如果我们对自己发布的资源不满意,就可以点击修改资源:
比如我们再插入一张图:
如果我们不再想保留这个资源,可以点击删除按钮,删除资源:
综上所述,我的基本工作就是完成一个类似于可以上传文件的博客,我负责这一模块从前端到后台的整个过程,除了最初的构建模型外,我还编写了四个controller负责完成页面的各种操作,以及多种按钮的ajax操作,因为在数据库层面无法直接表达多对多关系,所以其中还涉及了多种中间表的操作,前端界面主要采用了bootstrap框架,通过我的博客记录,可以看到我在中间的实现过程中经历了许多推导重来的工作,无论在前端界面的设计、还是后台模型的修改,导致我的代码量波动巨大,虽然总共写了近万行代码,但其中删除了4000行。
通过本次实训吧,我对系统级的工程有了更深的认识,明白初始的软件需求和软件设计和最后的产品之间的巨大变化,更让我理解到软件开发过程管理的重量性,系统的设计是至关重要的,如果一开始在某个方面没有设计清楚就开始动工,后面推翻重来的风险极大,而且开发过程中人员的协作是至关重要的,虽说我们的分工方式是一人一个模块,但模块之间并不是独立的,比如我的知识模块就需要与用户模块、后台模块紧密交互,这个过程中对于接口、模型的协商就显得至为关键,而且本次依托于github完成了版本的控制,让我明白版本控制的重要性,当现在的代码被改的面目全非时,备份真的能救自己一命。总的来说,系统级的程序和我们平时的实验是不一样的,它不仅仅关注代码的逻辑,更有整个项目的管理和团队的分工协作等非技术性问题。