布丁的博客

好吃的技术宅∧ ∧

NthsKeys——寒假答案计划

| 1 Comment

项目地址:
https://github.com/bdbai/NthsKeys

目的略,详见项目 README.md
原本打算大干一场,搞个答案共享社区,云服务器存数据,自己电脑作解压服务器,有密码的人提交密码,自动解压上传……后来一想,那些个答案网上都有整本现成的,特别需要答案的人哪会弄这么复杂。所以用户端目前先简单做,去年的页面接着用。数据提供端,也就是我这里,高端点没问题。说实话,在 Linux 里面为这东西刻意跑个虚拟机,没有开发环境也没有脚本,麻烦的很。不过做完这个项目,接下来就没机会用 C# 了。

项目分成五个部分,下面逐一介绍。

  1. DataModel
    按照分层的想法,“数据模型”应该被单独分出来,而“数据模型”与关系型数据库的结构又有着一一对应的关系。过去,我通常会用额外的逻辑,也就是“DAL”来联系数据库与模型,现在完全可以交给 Entity Framework 框架。Entity Framework 实际上是一种 ORM,它通过与 LINQ 的紧密联系,大大简化了对数据库的操作,同时也给数据库设计提供了便利。
    在这个项目中,我们使用的是 MySQL 数据库。只需要完整安装 MySQL 官方提供的 Connector/Net 连接库,就可以获得 Entity Framework 操控 MySQL 数据库的能力。我已经在 MySQL 中设计好了表结构,通过 Database First 可以从数据库创建对应的“实体”,看上去就像普通的类。使用起来不需要考虑数据库相关的逻辑,非常方便。比如:

    这样就可以生成类似 SELECT * FROM `settings` WHERE `Key` = 'lastUpdate' LIMIT 1 的 SQL 查询语句,而查询结果又会被填入一个类型为 settings 的对象。比起手拼 SQL,使用 Entity Framework 的开发效率要高不少。缺点在于程序与数据库之间的连接被封装在框架中,异常处理不是很方便,比较适合受控程度较大的服务端。

  2. KeyCrawler
    抓取答案文章的爬虫类库。用到一个 HtmlAgilityPack Nuget 包来解析 HTML,配合 XPath 可以简洁、迅速地获取所需的信息。想想堪比刀耕火种的正则表达式,这东西不能再给力了。
    我在 Freenom 申请过几个免费的 tk 和 ml 域名,其中有些因为没有做 @ 子域名的A记录解析,不幸被回收了。听说访问量不够的域名也会被回收,我就邪恶地把一个暂时没有用的域名解析到学校官网,让爬虫爬。希望不会被搜索引擎爬去。
  3. Runner
    命令行应用程序,用来自动爬取、下载和记录答案压缩包。原本计划让它常驻,每隔一段时间就跑,一旦有新情况还能发邮件。现在换了系统,只能每天手动了。
  4. Uncompress
    这是一个调用 7z 命令行程序解压,并自动归类的类库。没什么黑科技。
  5. PasswordEntrance
    管理压缩包和密码的 GUI 程序,界面使用了 WPF。微软 MVVM 这个理念让数据呈现变得很轻松,XAML 设计好,弄一下绑定,数据就会自己跳进 UI 控件里去。输完密码还可以直接解压、归类,配合七牛的同步工具食用更佳。

理想很丰满,现实很骨感。初衷是好的,最后变成了给自己添麻烦的东西。不管怎么样,自己挖的坑,含着泪也要填完。写了这么久的 C#,也算是给自己一个交代吧。

临时的客户端页面地址:
http://nths2016bhw.sinaapp.com/

anyShare分享到:

One Comment

  1. Pingback: 从 NthsKeys 到 NthsKeys-node |

发表评论

Required fields are marked *.