在本项目中,我主要负责后端服务器的搭建、数据库的建立、部分ViewModel的实现、一些UI的优化。具体包括:
-
服务器及数据库部分
- 服务器的搭建
- 数据库的生成
- 服务器与数据库之间的通信
- 多台主机之间的通信
-
ViewModel及Service部分
- 部分viewmodel
- NavigationService
- SimpleIOC
-
UI部分
- 主界面NavigationView的优化
- 标题栏的优化
下面我将从我自己编程的角度来分享我的技术文档。
技术文档:
-
服务器及数据库部分
- 所用框架:ASP.NET CORE 2.0 MVC
- 数据访问部分:Entity Framework Core
- 所用数据库:MS SQL Server
- 所用服务器:本地服务器(我的主机)
- 参考的文档:
https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db
http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-index.html
简单阐述一遍具体的搭建过程:
EF Core有一种具有特色的被称为 Code First 的开发模式。先编写代码,然后通过这些代码创建数据库表。
Code First 允许通过编写一些简单的类来创建数据模型对象,然后根据编写的类自动创建数据库。
数据库的设计部分由我的队友完成。
UserMission表采用了联合主键,定义联合主键:
打开Startup.cs
接下来,生成数据库:
- 工具 - > NuGet包管理器 - >包管理器控制台
- 运行Add-Migration InitialCreate
- 运行Update-Database
- 如果更改了数据库的表项,则需运行Drop-Database,删除Migrations文件夹,再重新迁移
为了方便后台管理,使用了Microsoft SQL Server Management Studio
生成具体controller的部分由我的队友完成。
多台主机间的通信:
我的主机(localhost)作为服务器,所有想要进行通信的主机需要连在同一个WiFi下,
- 打开Program.cs:
Kestrel Server是ASP.NET 默认的Web Server,用UseKestrel方法,修改options参数
- 所有需要连接的主机,打开lauchSettings.json
url改成我的主机在连接的这个WiFi下的ip地址
(win+R运行cmd运行ipconfig来查询)
http://172.20.10.5:13059/ ip地址:端口号
- 至此,多主机的通信完成,其他主机也可以通过连接服务器来查看数据库的信息。
-
ViewModel以及Service部分
具体的ViewModel和Service的写法在这里不进行赘述。
Xaml中的button进行点击响应的两种方法:
- xaml中添加click,xaml.cs中生成buttonclick函数。
- MVVM模式:xaml中添加command,绑定viewmodel中的relaycommand。
在写注册时遇到的问题:
注册功能流程:
1、用户输入注册信息;
2、判断注册信息是否有误;
3、若有误,则重新输入;
4、若无误,执行addasync函数,通过服务器将用户信息写入数据库;
5、注册成功之后跳转到登陆界面进行登陆。
使用方法:MVVM模式;SignupViewModel;SignupCommand
前4步没有问题,进行到第5步:跳转
Xaml.cs中的跳转使用的是Frame.Navigate函数,在ViewModel中用不了这个函数。。
进行了第一次尝试:click和command都写,出现情况:不论注册信息有没有误,都会进行跳转操作。设断点后发现点击button后是调用click函数,再调用command。
进行了第二次尝试:写NavigationService导航服务。
NavigationService可以用作所有界面的跳转
改进后的NavigationService.cs:
SignupPageViewModel.cs:
SignupCommand:
原始的NavigationService.cs:
App.xaml.cs:
MainPage.xaml:
FieldModifier设置为Public
SimpleIOC
SimpleIOC是MVVM Light提供的IoC容器
IoC(Inversion of Control),控制反转
参考文档:https://msdn.microsoft.com/en-us/magazine/jj991965.aspx
IoC意味着创建和保留实例的行为不再是类的责任,就像在传统的面向对象编程中一样,而是委托给外部容器。虽然这不是义务,但缓存的实例通常会注入到使用者类的构造函数中,或者通过使用者的属性提供。请注意,IOC容器无需依赖注入,但它是将消费者与缓存实例和缓存本身分离的便捷方式。目的是降低程序的耦合。
解释:如果不使用simple ioc,
只要一个page需要viewmodel,就需要生成一个新对象
App.xaml中加入:
需要在xaml中加入:
Xmal.cs中加入:
而使用simpleIoC,只需要一个ViewModelLocator
注册所有Service和ViewModel
GetInstance
SignUpPage.cs
-
UI优化部分
参考文档:
generic.xaml中包含所有win10 uwp中的组件的默认属性和默认参数。
- 使用方法:
在Pages.Resources中引用,赋予一个key值,修改成自己想要的参数,在所需的组件的Style属性中调用。
以MainPage为例:
隐藏标题栏:
修改前:
修改后:
代码部分:
单元测试:
进行了初始版本的Services中8个函数的测试,后续测试由我的队友完成。