在本项目中,我主要负责后端服务器的搭建、数据库的建立、部分ViewModel的实现、一些UI的优化。具体包括:

  • 服务器及数据库部分

  1. 服务器的搭建
  2. 数据库的生成
  3. 服务器与数据库之间的通信
  4. 多台主机之间的通信
  • ViewModel及Service部分

  1. 部分viewmodel
  2. NavigationService
  3. SimpleIOC
  • UI部分

  1. 主界面NavigationView的优化
  2. 标题栏的优化

下面我将从我自己编程的角度来分享我的技术文档。

技术文档:


  • 服务器及数据库部分

  • 所用框架: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

 

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

简单阐述一遍具体的搭建过程:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

 

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

EF Core有一种具有特色的被称为 Code First 的开发模式。先编写代码,然后通过这些代码创建数据库表。

Code First 允许通过编写一些简单的类来创建数据模型对象,然后根据编写的类自动创建数据库。

数据库的设计部分由我的队友完成。

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

 

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

UserMission表采用了联合主键,定义联合主键:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

打开Startup.cs

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

接下来,生成数据库:

  • 工具 - > NuGet包管理器 - >包管理器控制台
  • 运行Add-Migration InitialCreate

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

  • 运行Update-Database
  • 如果更改了数据库的表项,则需运行Drop-Database,删除Migrations文件夹,再重新迁移

为了方便后台管理,使用了Microsoft SQL Server Management Studio

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

 

 

生成具体controller的部分由我的队友完成。

 

多台主机间的通信:

我的主机(localhost)作为服务器,所有想要进行通信的主机需要连在同一个WiFi下,

  • 打开Program.cs:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

Kestrel Server是ASP.NET 默认的Web Server,用UseKestrel方法,修改options参数

  • 所有需要连接的主机,打开lauchSettings.json

url改成我的主机在连接的这个WiFi下的ip地址

(win+R运行cmd运行ipconfig来查询)

http://localhost:13059/

http://172.20.10.5:13059/  ip地址:端口号

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

  • 至此,多主机的通信完成,其他主机也可以通过连接服务器来查看数据库的信息。

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

 


  • ViewModel以及Service部分

具体的ViewModel和Service的写法在这里不进行赘述。

Xaml中的button进行点击响应的两种方法:

  1. xaml中添加click,xaml.cs中生成buttonclick函数。
  2. 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:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

SignupPageViewModel.cs:

    SignupCommand:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

原始的NavigationService.cs:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

App.xaml.cs:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

MainPage.xaml:

FieldModifier设置为Public

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

 

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中加入:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

 

需要在xaml中加入:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

Xmal.cs中加入:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

而使用simpleIoC,只需要一个ViewModelLocator

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

注册所有Service和ViewModel

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

GetInstance

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

SignUpPage.cs

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博


  • UI优化部分

参考文档:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

generic.xaml中包含所有win10 uwp中的组件的默认属性和默认参数。

  • 使用方法:

在Pages.Resources中引用,赋予一个key值,修改成自己想要的参数,在所需的组件的Style属性中调用。

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

以MainPage为例:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

 

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

 

隐藏标题栏:

修改前:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

修改后:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

代码部分:

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博


 单元测试:

 进行了初始版本的Services中8个函数的测试,后续测试由我的队友完成。

【Uwp Summer Project】DoMeAFavor——个人技术文档——王艺博

 

 

 

相关文章: