Xamarin全栈开发技术与实践(微课版)

Xamarin全栈开发技术与实践(微课版)
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
2021-12
版次: 1
ISBN: 9787302591535
定价: 79.00
装帧: 其他
开本: 16开
纸张: 胶版纸
7人买过
  • 复杂工程问题的解决要求学生具备整合运用客户端开发技能栈、服务器端开发技能栈、软件工程技能栈、人机交互技能栈等多个技能栈的能力。为培养学生多技能栈整合运用的能力,本书介绍基于Xamarin.Forms框架的面向iOS、Android,以及Windows平台的客户端服务器端Xamarin全栈开发技术,涵盖语言特性、设计思想、技术技巧、测试方法等内容,并通过一个完整的实例连接全部知识与技能。本书尤其注重多种技术栈的有机融合,为培养解决复杂工程问题的能力提供完整的支持。 本书面向具有一定计算机专业课基础的读者。本书读者应至少掌握一门编程语言,并能独立完成简单的开发任务。本书可作为全栈开发技术相关课程的本科生教材,也可以作为基于Xamarin.Forms框架的全栈开发入门参考书。 张引,男,1985年5月生于辽宁沈阳。现就职东北大学计算机科学与工程学院。信息搜索领域副教授,主要从事搜索学习相关研究。发表SCI论文近十篇。获辽宁省科技进步二等奖一次。 部分基础与用户

    第1章马上开始3

    1.1系统要求(简化版)3

    1.2下载Visual Studio Community3

    1.3安装Visual Studio Community4

    1.4注册、下载并安装ReSharper4

    1.5安装Android Studio5

    1.6Hello World!6

    1.7背景与概念8

    1.8系统要求(完整版)9

    1.9动手做10

    第2章认识一批控件11

    2.1网格布局控件Grid11

    2.2线性布局控件StackLayout13

    2.3滚动视图控件ScrollView14

    2.4超链接按钮HyperlinkButton14

    2.5弹出信息DisplayAlert16

    2.6开关控件Switch16

    2.7滑块控件Slider17

    2.8控件使用的一般规律18

    2.9动手做19

    第3章寻找用户20

    3.1重视项目问题的质量20

    3.2“认真地”观察用户: 使用5W方法22

    3.3进一步了解用户: 面对面访谈24

    3.4同理心25

    3.5奶爸F的观察与访谈总结25

    3.6动手做26

    3.7给PBL教师的建议26

    第4章再认识一批控件28

    4.1响应式设计与VisualStateManager28

    4.2列表视图控件ListView31

    4.3动手做34

    4.4给PBL教师的建议34

    第5章提出并评价界面设计36

    5.1绘制界面设计36

    5.2形成操作动线38

    5.3评价界面设计39

    5.4动手做40

    第6章开启数据管理之门41

    6.1管理少量本地数据: 偏好存储42

    6.2管理大量本地数据: 数据库42

    6.3访问远程数据: Web服务46

    6.4是否优雅47

    6.5动手做49

    Xamarin全栈开发技术与实践(微课版)目录第二部分框架与方法

    第7章踏上软件架构之路53

    7.1ModelViewViewModel架构模式53

    7.2View54

    7.3ViewModel55

    7.3.1属性56

    7.3.2Command(命令)58

    7.4ViewModelLocator59

    7.5App.xaml61

    7.6再次审视MVVM模式62

    7.7动手做63

    第8章MVVM   IService架构64

    8.1Model64

    8.2IService65

    8.3在ViewModel中使用IService66

    8.4实现IService68

    8.5在ViewModel中获得IService实例69

    8.6审视MVVM   IService架构71

    8.7动手做72

    8.8给PBL教师的建议72

    第9章编码规范73

    9.1命名规范73

    9.2排版规范75

    9.3文档注释规范76

    9.4动手做78

    9.5给PBL教师的建议78

    第10章重新审视数据库79

    10.1开启Dpx: 使用MasterDetail项目模板79

    10.2选择“好的”数据库81

    10.3提出“好的”数据库设计83

    10.4诗词数据Model: Poetry类84

    10.5诗词数据管理IService: IPoetryStorage86

    10.6实现IPoetryStorage87

    10.6.1连接到数据库: 通过Connection属性87

    10.6.2实现GetPoetryAsync函数: 语言集成查询LINQ88

    10.6.3实现GetPoetriesAsync函数: LINQ翻页89

    10.6.4实现InitializeAsync函数: 嵌入式资源90

    10.6.5实现Initialized函数91

    10.7反思数据库91

    10.8动手做92

    10.9给PBL教师的建议92

    第11章测试代码94

    11.1Hello Unit Test World!94

    11.2Mocking: 模拟任意接口的实现96

    11.3决定测试内容97

    11.4测试PoetryStorage98

    11.5为测试优化设计99

    11.6再次测试PoetryStorage101

    11.6.1测试Initialized函数: 验证Mocking调用101

    11.6.2测试InitializeAsync函数: 清除副作用102

    11.6.3测试GetPoetryAsync函数: 再次调整设计103

    11.6.4测试GetPoetriesAsync函数: 初识动态LINQ105

    11.7反思单元测试106

    11.8动手做107

    11.9给PBL教师的建议107

    第12章实战级数据库View与ViewModel109

    12.1搜索结果页View: 设计时数据109

    12.2搜索结果页ViewModel111

    12.2.1无限滚动与InfiniteScrollCollection111

    12.2.2重置搜索结果与PageAppearingCommand114

    12.3单元测试搜索结果页ViewModel115

    12.3.1为ViewModel准备IService115

    12.3.2测试Command: 使用Command函数117

    12.3.3测试可绑定属性: 监听PropertyChanged事件118

    12.4连接View与ViewModel119

    12.4.1ViewModelLocator与App.xaml120

    12.4.2扩展控件的功能: 使用Behavior121

    12.5实战的反思123

    12.6动手做124

    12.7给PBL教师的建议124

    第13章源代码管理、分支开发与Git125

    13.1准备工作125

    13.2将项目发布到Gitee125

    13.3同步更改127

    13.4解决冲突128

    13.5撤销更改130

    13.6分支开发131

    13.7关于Git133

    第14章今日推荐页ViewModel与IService: 从需求到设计135

    14.1确定ViewModel的数据与功能135

    14.2审视相关的页面137

    14.3设计IService138

    14.4反思设计140

    14.5动手做141

    14.6给PBL教师的建议141

    第15章实战分支开发142

    15.1今日推荐页View分支142

    15.1.1实践VisualStateManager142

    15.1.2显示背景图片: 使用绑定值转换器IValueConverter143

    15.1.3用户界面的平台差异: 使用OnPlatform146

    15.2今日推荐页ViewModel分支147

    15.2.1初始化ViewModel: 使用PageAppearingCommand147

    15.2.2背景图片与诗词推荐的同步初始化: 并行执行代码150

    15.3单元测试今日推荐页ViewModel: 测试并行执行的代码152

    15.4反思分支开发153

    15.5动手做154

    15.6给PBL教师的建议154

    第16章实战级Web服务客户端155

    16.1今日诗词Web服务客户端155

    16.1.1构建稳定的Web服务客户端: 使用using与异常处理155

    16.1.2警告服务IAlertService: 为IService服务的IService157

    16.1.3实现警告服务IAlertService: MVVM   IService架构的

    分层视图158

    16.1.4缓存访问Token: 内存存储两级缓存策略161

    16.1.5设置访问Token: 使用HttpRequestHeaders163

    16.1.6准备备份方案163

    16.2模仿Web服务165

    16.3单元测试Web服务客户端167

    16.4反思Web服务客户端168

    16.5动手做168

    16.6给PBL教师的建议168

    第17章依赖注入170

    17.1新建对象的迷思170

    17.2使用工厂函数创建对象172

    17.3使用依赖注入容器创建对象174

    17.4反思依赖注入176

    第三部分深入客户端

    第18章文件的下载与缓存179

    18.1下载文件179

    18.2检查文件更新180

    18.3设计文件缓存182

    18.4实现文件缓存184

    18.5文件的单元测试186

    18.6反思文件操作187

    第19章页面导航189

    19.1MasterDetail模板的页面导航189

    19.1.1主从列表导航190

    19.1.2主从菜单导航191

    19.2设计导航服务194

    19.3实现导航服务195

    19.3.1实现内容导航服务195

    19.3.2实现内容页面激活服务: 使用字典缓存对象197

    19.3.3实现根页面激活服务: 工厂函数的优势199

    19.3.4实现根导航服务: 重置导航历史199

    19.4添加并导航到推荐详情页201

    19.4.1推荐详情页ViewModel: 共用ViewModel201

    19.4.2推荐详情页View202

    19.5反思页面导航204

    19.6动手做204

    19.7给PBL教师的建议204

    第20章带参数的页面导航206

    20.1添加诗词详情页206

    20.2实现带参数导航207

    20.2.1自定义可绑定属性209

    20.2.2绑定到自定义属性210

    20.2.3赋值到自定义属性211

    20.3导航到诗词详情页212

    20.3.1确定ListView的点击项: 使用事件参数转换器212

    20.3.2传递点击项到Command: 使用带参数的Command213

    20.4反思带参数导航214

    第21章ViewModel in ViewModel215

    21.1来自诗词搜索页的挑战: “大小”ViewModel215

    21.1.1“小”ViewModel216

    21.1.2“大”ViewModel218

    21.2单元测试“大小ViewModel”: 使用虚函数220

    21.3添加诗词搜索页221

    21.4动手做222

    21.5给PBL教师的建议222

    第22章LINQ与动态查询223

    22.1深入LINQ223

    22.2再识动态LINQ225

    22.2.1从FilterViewModel生成查询条件226

    22.2.2组合多个查询条件227

    22.3单元测试动态LINQ: 截获模仿函数的参数228

    22.4更新搜索结果页230

    22.5反思LINQ230

    22.6动手做231

    第23章页面导航的更多细节232

    23.1传递搜索条件的第二种方案232

    23.1.1更新推荐详情页ViewModel233

    23.1.2更新诗词搜索页234

    23.2更新菜单页235

    23.3初始化页236

    23.3.1添加初始化页236

    23.3.2导航到初始化页238

    23.4动手做239

    23.5给PBL教师的建议239

    第24章消息机制240

    24.1使用返回值传递信息240

    24.2使用事件传递信息241

    24.2.1定义事件241

    24.2.2关联事件处理函数242

    24.2.3触发事件242

    24.3使用消息机制传递信息244

    24.3.1定义消息244

    24.3.2监听消息244

    24.3.3发布消息245

    24.4使用消息机制更新导航菜单245

    24.4.1定义根导航消息245

    24.4.2监听根导航消息245

    24.4.3发布根导航消息246

    24.5反思消息机制246

    24.6动手做247

    24.7给PBL教师的建议247

    第25章跨页面同步数据248

    25.1收藏Model与IService248

    25.1.1设计收藏Model248

    25.1.2设计收藏IService249

    25.1.3实现收藏IService250

    25.2诗词收藏页ViewModel与View250

    25.3更新诗词详情页252

    25.3.1读取诗词收藏状态253

    25.3.2更新诗词收藏状态254

    25.4同步诗词详情页与诗词收藏页256

    25.4.1定义收藏存储已更新事件256

    25.4.2处理收藏存储已更新事件257

    25.4.3触发收藏存储已更新事件258

    25.5反思跨页面同步数据258

    25.6动手做259

    25.7给PBL教师的建议259

    第26章面向数据同步的设计260

    26.1数据同步260

    26.2为同步修改设计261

    26.2.1修改Model261

    26.2.2修改IService与ViewModel261

    26.3同步IService263

    26.3.1设计同步IService263

    26.3.2实现同步IService266

    26.4反思数据同步269

    26.5给PBL教师的建议270

    第27章与OneDrive同步271

    27.1为什么是OneDrive271

    27.2准备工作272

    27.2.1厘清概念272

    27.2.2注册客户端ID273

    27.2.3准备集成Azure AD身份验证273

    27.3实现OneDrive远程收藏存储274

    27.3.1登录与注销274

    27.3.2上传与下载275

    27.4实现数据同步页277

    27.4.1数据同步页ViewModel277

    27.4.2数据同步页View278

    27.5再次反思设计278

    27.6给PBL教师的建议279

    第四部分服务器端开发

    第28章选择服务器端技术方案283

    28.1自有服务器 VS 云服务器: 选择基础设施283

    28.2自建平台 VS 云平台: 选择开发与部署平台284

    28.3更加简便的方法285

    28.4其他可选项286

    28.5Hello Functions287

    28.6反思服务器端技术选型288

    28.7动手做288

    28.8给PBL教师的建议288

    第29章服务器端身份验证289

    29.1选择服务器端身份验证方案289

    29.2Auth0的身份验证过程290

    29.3服务器端身份验证IService292

    29.3.1设计身份验证IService292

    29.3.2实现身份验证IService292

    29.4设计远程收藏存储Web服务294

    29.5首个Web服务: Ping295

    29.6动手做296

    第30章客户端身份验证297

    30.1设计客户端身份验证IService297

    30.2实现客户端身份验证IService298

    30.3添加Azure收藏存储299

    30.3.1实现SignInAsync函数299

    30.3.2实现SignOutAsync函数300

    30.3.3实现IsSignedInAsync函数300

    30.4更新数据同步页303

    30.5继续实现客户端身份验证IService303

    30.6反思客户端身份验证304

    30.7动手做305

    第31章服务器端授权306

    31.1设计服务器端授权IService306

    31.2为远程收藏存储Web服务选择数据库307

    31.2.1要存储的数据307

    31.2.2可用的存储服务307

    31.3实现授权IService: 使用Azure Table Storage308

    31.3.1编辑Table Storage数据308

    31.3.2连接到Table Storage308

    31.3.3读取Table Storage数据309

    31.3.4为Ping Web服务添加授权310

    31.4反思服务器端授权310

    31.5动手做311

    第32章缓存访问Token312

    32.1设计Token缓存IService312

    32.2实现Token缓存IService313

    32.2.1实现GetAsync函数313

    32.2.2实现SetAsync函数314

    32.3更新AuthenticationService315

    32.4动手做315

    第33章上传与下载Web服务316

    33.1服务器端收藏存储316

    33.1.1设计服务器端收藏存储IService316

    33.1.2实现服务器端收藏存储IService317

    33.2下载Web服务318

    33.3上传Web服务320

    33.4更新客户端AzureFavoriteStorage321

    33.5清理工作323

    第34章下一步的学习324
  • 内容简介:
    复杂工程问题的解决要求学生具备整合运用客户端开发技能栈、服务器端开发技能栈、软件工程技能栈、人机交互技能栈等多个技能栈的能力。为培养学生多技能栈整合运用的能力,本书介绍基于Xamarin.Forms框架的面向iOS、Android,以及Windows平台的客户端服务器端Xamarin全栈开发技术,涵盖语言特性、设计思想、技术技巧、测试方法等内容,并通过一个完整的实例连接全部知识与技能。本书尤其注重多种技术栈的有机融合,为培养解决复杂工程问题的能力提供完整的支持。 本书面向具有一定计算机专业课基础的读者。本书读者应至少掌握一门编程语言,并能独立完成简单的开发任务。本书可作为全栈开发技术相关课程的本科生教材,也可以作为基于Xamarin.Forms框架的全栈开发入门参考书。
  • 作者简介:
    张引,男,1985年5月生于辽宁沈阳。现就职东北大学计算机科学与工程学院。信息搜索领域副教授,主要从事搜索学习相关研究。发表SCI论文近十篇。获辽宁省科技进步二等奖一次。
  • 目录:
    部分基础与用户

    第1章马上开始3

    1.1系统要求(简化版)3

    1.2下载Visual Studio Community3

    1.3安装Visual Studio Community4

    1.4注册、下载并安装ReSharper4

    1.5安装Android Studio5

    1.6Hello World!6

    1.7背景与概念8

    1.8系统要求(完整版)9

    1.9动手做10

    第2章认识一批控件11

    2.1网格布局控件Grid11

    2.2线性布局控件StackLayout13

    2.3滚动视图控件ScrollView14

    2.4超链接按钮HyperlinkButton14

    2.5弹出信息DisplayAlert16

    2.6开关控件Switch16

    2.7滑块控件Slider17

    2.8控件使用的一般规律18

    2.9动手做19

    第3章寻找用户20

    3.1重视项目问题的质量20

    3.2“认真地”观察用户: 使用5W方法22

    3.3进一步了解用户: 面对面访谈24

    3.4同理心25

    3.5奶爸F的观察与访谈总结25

    3.6动手做26

    3.7给PBL教师的建议26

    第4章再认识一批控件28

    4.1响应式设计与VisualStateManager28

    4.2列表视图控件ListView31

    4.3动手做34

    4.4给PBL教师的建议34

    第5章提出并评价界面设计36

    5.1绘制界面设计36

    5.2形成操作动线38

    5.3评价界面设计39

    5.4动手做40

    第6章开启数据管理之门41

    6.1管理少量本地数据: 偏好存储42

    6.2管理大量本地数据: 数据库42

    6.3访问远程数据: Web服务46

    6.4是否优雅47

    6.5动手做49

    Xamarin全栈开发技术与实践(微课版)目录第二部分框架与方法

    第7章踏上软件架构之路53

    7.1ModelViewViewModel架构模式53

    7.2View54

    7.3ViewModel55

    7.3.1属性56

    7.3.2Command(命令)58

    7.4ViewModelLocator59

    7.5App.xaml61

    7.6再次审视MVVM模式62

    7.7动手做63

    第8章MVVM   IService架构64

    8.1Model64

    8.2IService65

    8.3在ViewModel中使用IService66

    8.4实现IService68

    8.5在ViewModel中获得IService实例69

    8.6审视MVVM   IService架构71

    8.7动手做72

    8.8给PBL教师的建议72

    第9章编码规范73

    9.1命名规范73

    9.2排版规范75

    9.3文档注释规范76

    9.4动手做78

    9.5给PBL教师的建议78

    第10章重新审视数据库79

    10.1开启Dpx: 使用MasterDetail项目模板79

    10.2选择“好的”数据库81

    10.3提出“好的”数据库设计83

    10.4诗词数据Model: Poetry类84

    10.5诗词数据管理IService: IPoetryStorage86

    10.6实现IPoetryStorage87

    10.6.1连接到数据库: 通过Connection属性87

    10.6.2实现GetPoetryAsync函数: 语言集成查询LINQ88

    10.6.3实现GetPoetriesAsync函数: LINQ翻页89

    10.6.4实现InitializeAsync函数: 嵌入式资源90

    10.6.5实现Initialized函数91

    10.7反思数据库91

    10.8动手做92

    10.9给PBL教师的建议92

    第11章测试代码94

    11.1Hello Unit Test World!94

    11.2Mocking: 模拟任意接口的实现96

    11.3决定测试内容97

    11.4测试PoetryStorage98

    11.5为测试优化设计99

    11.6再次测试PoetryStorage101

    11.6.1测试Initialized函数: 验证Mocking调用101

    11.6.2测试InitializeAsync函数: 清除副作用102

    11.6.3测试GetPoetryAsync函数: 再次调整设计103

    11.6.4测试GetPoetriesAsync函数: 初识动态LINQ105

    11.7反思单元测试106

    11.8动手做107

    11.9给PBL教师的建议107

    第12章实战级数据库View与ViewModel109

    12.1搜索结果页View: 设计时数据109

    12.2搜索结果页ViewModel111

    12.2.1无限滚动与InfiniteScrollCollection111

    12.2.2重置搜索结果与PageAppearingCommand114

    12.3单元测试搜索结果页ViewModel115

    12.3.1为ViewModel准备IService115

    12.3.2测试Command: 使用Command函数117

    12.3.3测试可绑定属性: 监听PropertyChanged事件118

    12.4连接View与ViewModel119

    12.4.1ViewModelLocator与App.xaml120

    12.4.2扩展控件的功能: 使用Behavior121

    12.5实战的反思123

    12.6动手做124

    12.7给PBL教师的建议124

    第13章源代码管理、分支开发与Git125

    13.1准备工作125

    13.2将项目发布到Gitee125

    13.3同步更改127

    13.4解决冲突128

    13.5撤销更改130

    13.6分支开发131

    13.7关于Git133

    第14章今日推荐页ViewModel与IService: 从需求到设计135

    14.1确定ViewModel的数据与功能135

    14.2审视相关的页面137

    14.3设计IService138

    14.4反思设计140

    14.5动手做141

    14.6给PBL教师的建议141

    第15章实战分支开发142

    15.1今日推荐页View分支142

    15.1.1实践VisualStateManager142

    15.1.2显示背景图片: 使用绑定值转换器IValueConverter143

    15.1.3用户界面的平台差异: 使用OnPlatform146

    15.2今日推荐页ViewModel分支147

    15.2.1初始化ViewModel: 使用PageAppearingCommand147

    15.2.2背景图片与诗词推荐的同步初始化: 并行执行代码150

    15.3单元测试今日推荐页ViewModel: 测试并行执行的代码152

    15.4反思分支开发153

    15.5动手做154

    15.6给PBL教师的建议154

    第16章实战级Web服务客户端155

    16.1今日诗词Web服务客户端155

    16.1.1构建稳定的Web服务客户端: 使用using与异常处理155

    16.1.2警告服务IAlertService: 为IService服务的IService157

    16.1.3实现警告服务IAlertService: MVVM   IService架构的

    分层视图158

    16.1.4缓存访问Token: 内存存储两级缓存策略161

    16.1.5设置访问Token: 使用HttpRequestHeaders163

    16.1.6准备备份方案163

    16.2模仿Web服务165

    16.3单元测试Web服务客户端167

    16.4反思Web服务客户端168

    16.5动手做168

    16.6给PBL教师的建议168

    第17章依赖注入170

    17.1新建对象的迷思170

    17.2使用工厂函数创建对象172

    17.3使用依赖注入容器创建对象174

    17.4反思依赖注入176

    第三部分深入客户端

    第18章文件的下载与缓存179

    18.1下载文件179

    18.2检查文件更新180

    18.3设计文件缓存182

    18.4实现文件缓存184

    18.5文件的单元测试186

    18.6反思文件操作187

    第19章页面导航189

    19.1MasterDetail模板的页面导航189

    19.1.1主从列表导航190

    19.1.2主从菜单导航191

    19.2设计导航服务194

    19.3实现导航服务195

    19.3.1实现内容导航服务195

    19.3.2实现内容页面激活服务: 使用字典缓存对象197

    19.3.3实现根页面激活服务: 工厂函数的优势199

    19.3.4实现根导航服务: 重置导航历史199

    19.4添加并导航到推荐详情页201

    19.4.1推荐详情页ViewModel: 共用ViewModel201

    19.4.2推荐详情页View202

    19.5反思页面导航204

    19.6动手做204

    19.7给PBL教师的建议204

    第20章带参数的页面导航206

    20.1添加诗词详情页206

    20.2实现带参数导航207

    20.2.1自定义可绑定属性209

    20.2.2绑定到自定义属性210

    20.2.3赋值到自定义属性211

    20.3导航到诗词详情页212

    20.3.1确定ListView的点击项: 使用事件参数转换器212

    20.3.2传递点击项到Command: 使用带参数的Command213

    20.4反思带参数导航214

    第21章ViewModel in ViewModel215

    21.1来自诗词搜索页的挑战: “大小”ViewModel215

    21.1.1“小”ViewModel216

    21.1.2“大”ViewModel218

    21.2单元测试“大小ViewModel”: 使用虚函数220

    21.3添加诗词搜索页221

    21.4动手做222

    21.5给PBL教师的建议222

    第22章LINQ与动态查询223

    22.1深入LINQ223

    22.2再识动态LINQ225

    22.2.1从FilterViewModel生成查询条件226

    22.2.2组合多个查询条件227

    22.3单元测试动态LINQ: 截获模仿函数的参数228

    22.4更新搜索结果页230

    22.5反思LINQ230

    22.6动手做231

    第23章页面导航的更多细节232

    23.1传递搜索条件的第二种方案232

    23.1.1更新推荐详情页ViewModel233

    23.1.2更新诗词搜索页234

    23.2更新菜单页235

    23.3初始化页236

    23.3.1添加初始化页236

    23.3.2导航到初始化页238

    23.4动手做239

    23.5给PBL教师的建议239

    第24章消息机制240

    24.1使用返回值传递信息240

    24.2使用事件传递信息241

    24.2.1定义事件241

    24.2.2关联事件处理函数242

    24.2.3触发事件242

    24.3使用消息机制传递信息244

    24.3.1定义消息244

    24.3.2监听消息244

    24.3.3发布消息245

    24.4使用消息机制更新导航菜单245

    24.4.1定义根导航消息245

    24.4.2监听根导航消息245

    24.4.3发布根导航消息246

    24.5反思消息机制246

    24.6动手做247

    24.7给PBL教师的建议247

    第25章跨页面同步数据248

    25.1收藏Model与IService248

    25.1.1设计收藏Model248

    25.1.2设计收藏IService249

    25.1.3实现收藏IService250

    25.2诗词收藏页ViewModel与View250

    25.3更新诗词详情页252

    25.3.1读取诗词收藏状态253

    25.3.2更新诗词收藏状态254

    25.4同步诗词详情页与诗词收藏页256

    25.4.1定义收藏存储已更新事件256

    25.4.2处理收藏存储已更新事件257

    25.4.3触发收藏存储已更新事件258

    25.5反思跨页面同步数据258

    25.6动手做259

    25.7给PBL教师的建议259

    第26章面向数据同步的设计260

    26.1数据同步260

    26.2为同步修改设计261

    26.2.1修改Model261

    26.2.2修改IService与ViewModel261

    26.3同步IService263

    26.3.1设计同步IService263

    26.3.2实现同步IService266

    26.4反思数据同步269

    26.5给PBL教师的建议270

    第27章与OneDrive同步271

    27.1为什么是OneDrive271

    27.2准备工作272

    27.2.1厘清概念272

    27.2.2注册客户端ID273

    27.2.3准备集成Azure AD身份验证273

    27.3实现OneDrive远程收藏存储274

    27.3.1登录与注销274

    27.3.2上传与下载275

    27.4实现数据同步页277

    27.4.1数据同步页ViewModel277

    27.4.2数据同步页View278

    27.5再次反思设计278

    27.6给PBL教师的建议279

    第四部分服务器端开发

    第28章选择服务器端技术方案283

    28.1自有服务器 VS 云服务器: 选择基础设施283

    28.2自建平台 VS 云平台: 选择开发与部署平台284

    28.3更加简便的方法285

    28.4其他可选项286

    28.5Hello Functions287

    28.6反思服务器端技术选型288

    28.7动手做288

    28.8给PBL教师的建议288

    第29章服务器端身份验证289

    29.1选择服务器端身份验证方案289

    29.2Auth0的身份验证过程290

    29.3服务器端身份验证IService292

    29.3.1设计身份验证IService292

    29.3.2实现身份验证IService292

    29.4设计远程收藏存储Web服务294

    29.5首个Web服务: Ping295

    29.6动手做296

    第30章客户端身份验证297

    30.1设计客户端身份验证IService297

    30.2实现客户端身份验证IService298

    30.3添加Azure收藏存储299

    30.3.1实现SignInAsync函数299

    30.3.2实现SignOutAsync函数300

    30.3.3实现IsSignedInAsync函数300

    30.4更新数据同步页303

    30.5继续实现客户端身份验证IService303

    30.6反思客户端身份验证304

    30.7动手做305

    第31章服务器端授权306

    31.1设计服务器端授权IService306

    31.2为远程收藏存储Web服务选择数据库307

    31.2.1要存储的数据307

    31.2.2可用的存储服务307

    31.3实现授权IService: 使用Azure Table Storage308

    31.3.1编辑Table Storage数据308

    31.3.2连接到Table Storage308

    31.3.3读取Table Storage数据309

    31.3.4为Ping Web服务添加授权310

    31.4反思服务器端授权310

    31.5动手做311

    第32章缓存访问Token312

    32.1设计Token缓存IService312

    32.2实现Token缓存IService313

    32.2.1实现GetAsync函数313

    32.2.2实现SetAsync函数314

    32.3更新AuthenticationService315

    32.4动手做315

    第33章上传与下载Web服务316

    33.1服务器端收藏存储316

    33.1.1设计服务器端收藏存储IService316

    33.1.2实现服务器端收藏存储IService317

    33.2下载Web服务318

    33.3上传Web服务320

    33.4更新客户端AzureFavoriteStorage321

    33.5清理工作323

    第34章下一步的学习324
查看详情
相关图书 / 更多
Xamarin全栈开发技术与实践(微课版)
Xamarin iOS移动开发实战
刘媛媛 著
Xamarin全栈开发技术与实践(微课版)
Xanadu
John Man 著