软工
- WPF(.net Core3.1)
- UI设计语言为谷歌的MaterialDesign,使用MaterialDesignInXamlToolkit和MaterialDesignExtensions来实现
- 注意MaterialDesignExtensions的TabStepper疑似存在一些问题,在Tab中使用某些MD控件会导致渲染的时候有很多莫名其妙的格线,应该是它的BUG,请小心使用
string GUID 订单号
string Name 物资名称
int Quantity 物资数量
int StartID 发货人ID
int FinishID 收货人ID
(对于捐赠,发货人为用户、收货人为管理员;对于分发,发货人为管理员、收货人为受捐赠者)
string Departure 出发地
string Destination 目的地
枚举类型 State 当前状态
DateTime StartTime 订单开始时间
DateTime FinishTime 订单完成时间
客户端通过DTO与服务器进行数据沟通,客户端会填写DTO中的request并发送给服务器,服务器根据收到的的request返回response。不同的操作request和response的结构不同,详见DTO
状态State有三种,定义如下:
public enum DeliveryState
{
Waiting, // 待接单(配送员尚未取得物资)
Processing, // 配送中(物资在配送员手中)
Finished // 已完成
}
可能的操作如下:
1.发送填充自己的ID和状态的DeliveryListRequest,获取与所发送状态相同的、包含物资全部信息的Item类的表List<Item>
2.发送填充自己的ID和状态的DeliveryListNumRequest,获取与所发送状态相同的物资总数
3.发送填充自己的ID、订单号和验证ID的DeliveryMoveRequest,返回代表操作结果的整数
此操作为向服务器申请将此订单的状态转移至下一状态,即
a.Waiting转移为Processing(验证ID为发货人ID)
b.Processing转移为Finished(验证ID为收货人ID)
0表示成功
1表示验证ID错误
2表示订单状态非Waiting或Processing
3表示其它错误
尽量使用MD的控件和Style
- 不确定服务器方面效率怎么样
- 异常处理问题,404,连不上服务器时客户端需要TryCatch来防止程序崩溃(可能可以统一处理?我没研究过)
- 边际问题,网络请求过程中可能需要Disable部分UI控件,防止意料之外的用户操作,这个可能可以用一个Extension解决
- 加载动画。网络请求时可以有加载动画的,这个功能也可以用一个Extension解决。
- 请使用GetAsync而不是Get,异步方法可以防止网络比较慢时UI线程卡死