EveryWhere是一个远程打印的平台,可以将你的打印机作为远程打印机使用,还可以分享给他人使用,实质上是一个共享云打印的平台。这也是我的毕业设计作品,为了能够更好地完成它,我打算在开发的时候写一下开发日志,同时也作为开发文档使用,记录一下项目开发中的各种想法和说明,以备后来之需。本篇将会介绍项目的需求,预备使用的技术栈。
这个项目将会是一个开源项目,用于互相交流学习使用,非常欢迎提出任何的建议和指导。
术语定义
首先我们先来界定一些概念,其中最重要的概念就是,谁来使用这个平台呢?不难想到有提供打印机的人、想要打印的人,此外当然还需要有人负责维护管理整个平台上的各种设置、数据,为前两种人正常使用平台做保障。说到这里可能有人会觉得第三种人就是开发者,但实际上并非如此,如果非要找一个更加契合这个角色的常见的形象的话,可能会更像客服,当然这里的“客服”权限要更大,可以对整个平台的各项数据和配置进行调整。我们在这里定义一下这三种人,分别称呼为商家或商户(Shopkeeper)、用户或消费者(Consumer)、运营(Manager),请注意这里对这三类人的定义,因为这可能和其他的平台或是网站之类的定义相去甚远,不要拿传统的“商家”、“用户”、“运营”概念套在这里,一个很简单的例子,“用户”这个概念通常意义上讲指所有使用者,而这里仅只表示想要打印的人。
概要需求分析
有了一些定义,接下来我们就可以很方便地描述整个系统的需求了。
对云打印平台来说,其实质是远程打印+交易,因此可以分别进行分析。
交易系统
先来说交易系统,这个应该是最容易分析和理解的一部分,我们平常用到的各类购物应用、网站,到处都有交易系统的影子。在这些购物应用上,当我们选中一件商品,选好尺码、颜色,填写好配送地址,选好优惠券以及诸如此类的必要操作,点击确认我们就下了一个订单。这个订单包括了上述所填写的信息,当我们付款后,商家就看到我们的订单,准备好货物,邮寄出去并更新订单状态,等我们收到包裹拿到物品,确认订单收货,一个订单就完成了它的使命,一场交易也就完成了。在我们平台这里,用户的目的就是打印某些东西,因此打印完的材料就是商品,不难类比当用户想要打印时,需要选择好商品,填写相关信息,付款,商家准备好商品,然后交付给用户。稍微有些不同的是,用户只会需要一件商品也只能选择一件商品——打印,因此用户必须先挑选不同的商家(例如最近的或是最便宜的),接着将需要打印的文件交给商家,同时说明具体的打印要求(就像是普通商品的颜色、尺码一样)例如单双面、是否彩印、纸张大小等,然后付款,商家开始打印。这就来到了另一个不同之处:商家打印完毕后,需要用户前去取打印完成的材料(当然商家也可以提供外送服务,但这里只考虑最常见的情况,提供外送服务可以作为未来的一项功能支持)。
有了以上的分析,可以得到交易系统的需求有:用户可以选择商家查看打印价格以及相关的信息(例如打印机配置、商家位置等),用户可以选择商家提供必要的打印信息下订单,用户可以为订单付款,用户可以查看自己下的订单,用户可以确认订单状态;商家可以看到用户在自己这里下的订单,商家可以根据用户订单进行打印,商家可以更新用户订单状态(例如从打印完毕修改为已取走)。
这样,关于交易系统的基本需求就整理清楚了。
远程打印
其实我们可以发现,云打印其实就是一个特异化的商城。如果我们要在淘宝上开一家打印店,我们收到一个订单后手动下载消费者发来的文件然后使用我们的打印机打印,打印完成后我们将其利用快递发出。现在,既然我们的全部商品就是打印业务,那么我们完全可以使其自动化工作,用户下完订单,上传完文件,程序会自动下载订单文件和打印配置并送入打印机,打印机进行打印,全程无需人来插手。分析完这个流程可以发现,我们需要的是云打印平台远程操控商家打印机(或者说电脑)进行打印,即一个远程打印系统。
这部分需求其实非常简单,商家可以添加自己的打印机并进行一定的配置如价格、支持的功能、开放时段等,商家接到订单后商家端自动下载订单文件和订单打印配置并进行打印。
职责划分
其实我们已经很明确地看到了系统中最主要的两个角色了,为了向这两种角色提供服务,我们一定要提供一定的形式或者说载体。考虑用户,我们需要为其提供下单的程序,一般情况下会采用APP或者小程序的形式提供服务,因此本项目用户端采用QQ小程序开发;考虑商家,我们需要提供远程打印程序以及管理商户的程序,又因为绝大部分人都使用Windows电脑,因此采用.Net框架配合WindowsApp SDK来开发打印程序,至于管理商户的程序,则考虑采用Web的形式进行开发,因为Web不需要单独下载程序,随时随地即可进行管理,下发新版本也很容易。
最后呢,还有一个我们暂时没有分析其需求的角色——运营,为该角色提供服务的程序也会是一个Web平台,理由同上。运营的需求我们暂时先不分析,待到整个系统的主体工程(也就是交易系统和远程打印系统)大致成型之后再进行。
除了具体的交互程序外,我们还需要服务端来为交互程序提供服务,这也是整个系统的枢纽,其中还包括了一个文件服务端(简称文件端),但是在这里我们先不讨论它,服务端的功能实际上不应该在需求分析中详细讨论,因为它不是直接面向用户的。
总结一下需要开发的程序有:小程序端(用户端)、打印端、商家端、管理端、服务端(Main Server)以及文件端(File Server)
相关链接
项目地址:HHaoWang/EveryWhere: EveryWhere项目服务端及桌面端 (github.com)
接口文档:EoLink/EveryWhere
使用到的技术及运行环境
服务端及文件端:.Net 6.0 WebAPI + MySql 5.7 + Nginx
打印端:.Net 6.0 WindowsApp1.0 + WinUI3
商家端、管理端:Vue3.0 + Vuetify
用户端:QQ小程序