基于Abp React前端的项目建立与运行

1 Abp项目配置

2 运行WebApi后端项目

2.1 创建C3D数据库,并且将数据库对应链接字符串替换

2.2 建立数据库进行数据迁移

主项目选择到StartUp所在的项目,C3D.Web.Host,nuget console窗口打到C3D.EntityFrameWork.Core项目;

然后输入数据迁移指令

Add-Migration first_init
Update-Database

2.3 运行WebApi项目

选择C3D.Web.Host,点击运行。

Swagger WebApi 接口页面如下:

3 运行React前端项目

3.1 利用yarn包安装工具

利用yarn包安装工具安装react客户端运行所需依赖包。

备注:会发现用npm无法安装成功,用yarn包安装时需要删除package-lock.json文件。

3.2 运行React项目

npm start

登录页面

  • 登录用户名:admin

    密码:123qwe

  • dashboard

3.3 使用React客户端的意义

有没有感觉3.2的UI很好看,是的,个人感觉UI的精细程度已经远远超过VUE的Element 跟Iview UI了。因为该项目使用的是ant-design UI。

而 github上直接搜索UI,按start排名。前两个UI 的都是react。这也就是我选择react的意义了。使用哪个框架其实都差不多,个人比较看重UI展示的精细化程度与美感。

这两个UI框架的贡献者与使用者规模已很大。

4 React 前端项目架构

4.1 技术栈

  • React 构建用户UI的js库;
  • Typescript 强类型语言,更适合后台编程人员;
  • Mobx 简单,可扩展的状态管理框架;
  • AntDesign 可为企业应用程序提供更好的用户体验;

4.2 设计原则

SOLID

简写 全拼 中文翻译
SRP The Single Responsibility Principle 单一责任原则
OCP The Open Closed Principle 开放封闭原则
LSP The Liskov Substitution Principle 里氏替换原则
ISP The Interface Segregation Principle 接口分离原则
DIP The Dependency Inversion Principle 依赖倒置原则
  • 单一责任原则:

    当需要修改某个类的时候原因有且只有一个(THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE)。换句话说就是让一个类只做一种类型责任,当这个类需要承当其他类型的责任的时候,就需要分解这个类。

  • 开放封闭原则:

    软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。这个原则是诸多面向对象编程原则中最抽象、最难理解的一个。

  • 里氏替换原则:

    当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系。

  • 接口分离原则:

    不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好。

  • 依赖倒置原则:

    1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象

    2.抽象不应该依赖于细节,细节应该依赖于抽象

4.3 mobx架构

官方例子

import React from "react"
import ReactDOM from "react-dom"
import { makeAutoObservable } from "mobx"
import { observer } from "mobx-react" // Model the application state.
class Timer {
secondsPassed = 0 constructor() {
makeAutoObservable(this)
} increase() {
this.secondsPassed += 1
} reset() {
this.secondsPassed = 0
}
} const myTimer = new Timer() // Build a "user interface" that uses the observable state.
const TimerView = observer(({ timer }) => (
<button onClick={() => timer.reset()}>Seconds passed: {timer.secondsPassed}</button>
)) ReactDOM.render(<TimerView timer={myTimer} />, document.body) // Update the 'Seconds passed: X' text every second.
setInterval(() => {
myTimer.increase()
}, 1000)

每个UI 组件(TimerView)都可定义一个observer 观察者,无需强制绑定,一旦该组件值发生变化,则会对UI进行自动计算渲染。也即如下流程图,一旦值变化事件发生,则会更新observer的状态,进而计算,进而出发UI重新渲染,而定义好,这些都通过mobx自动完成。

4.4 React前端整体架构

  • 所有与后端通信都通过服务层完成;
  • 每个容器里的组件都会存在一个仓储与一个模型;
  • 所有的服务在仓储层被调用,而非组件层;组件会执行仓储的actions来获取最新状态;
  • 展示组件的属性可以直接存储到仓储中,也能直接去仓储中取出;
  • 容器或者展示组件可以调用仓储的actions,Mobx能直接将注册过的组件进行自动渲染。

5 小结

这里为什么要用仓储层呢,笔者根据自己理解解释下,

  • 如果没加仓储,所有获取后台数据的服务都会泄漏到组件容器中,那样万一哪天需要改服务,则要到各组件中去改,会让人抓狂,而该框架中只需要在仓储层中改即可;
  • 另外有了仓储层,比如vue的vuex与react的redux或者mobx,可以在仓储层中作区分,而业务层代码完全可以写成一样,这样更易于vue与react之间的移植;

这应该是属于依赖倒置原则,组件调用依赖于仓储这个抽象并没有依赖于获取数据的对应服务,从而实现了易扩展,易复用,易维护的目的。


版权声明:本文为博主翻译文章+自己理解,部分代码自己写,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://www.cnblogs.com/JerryMouseLi/p/14336688.html

基于Abp React前端的项目建立与运行——React框架分析的更多相关文章

  1. 「实践篇」解决微前端 single-spa 项目中 Vue 和 React 路由跳转问题

    前言 本文介绍的是在做微前端 single-spa 项目过程中,遇到的 Vue 子应用和 React 子应用互相跳转路由时遇到的问题. 项目情况:single-spa 项目,基座用的是 React,目 ...

  2. React前端有钱途吗?《React+Redux前端开发实战》学起来

    再不学React就真的跟不上大前端的形式了,目前几乎所有前端的招聘条件都是精通React者优先,看看拉勾网的React薪资,都是15K-20K,这个暑假,必须动起来了. 如果你熟悉JavaScript ...

  3. React Native新项目启动报错'React/RCTBridgeDelegate.h' file not found

    React Native版本:0.60.4 解决方法: cd ios pod deintegrate pod install 然后重新启动就好了(示例页面变样了( ⊙ o ⊙ )) END------ ...

  4. 基于“事件”驱动的领域驱动设计(DDD)框架分析

    摘抄自 从去年10月份开始,学了几个月的领域驱动设计(Domain Driven Design,简称DDD).主要是学习领域驱动设计之父Eric Evans的名著:<Domain-driven ...

  5. 基于ABP模块组件与依赖注入组件的项目插件开发

    注意,阅读本文,需要先阅读以下两篇文章,并且对依赖注入有一定的基础. 模块系统:http://www.cnblogs.com/mienreal/p/4537522.html 依赖注入:http://w ...

  6. React躬行记(16)——React源码分析

    React可大致分为三部分:Core.Reconciler和Renderer,在阅读源码之前,首先需要搭建测试环境,为了方便起见,本文直接采用了网友搭建好的环境,React版本是16.8.6,与最新版 ...

  7. 在基于ABP框架的前端项目Vue&Element项目中采用日期格式处理,对比Moment.js和day.js的处理

    Day.js 是一个轻量的处理时间和日期的 JavaScript 库,和 Moment.js 的 API 设计保持完全一样. 如果您曾经用过 Moment.js, 那么您已经知道如何使用 Day.js ...

  8. 在基于ABP框架的前端项目Vue&Element项目中采用电子签名的处理

    在前面随笔介绍了<在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理>的处理,有的时候,我们在流程中或者一些文件签署的时候,需要签上自己的大名,一 ...

  9. 在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理

    在一些内部OA或者流转的文件,或者给一些客户的报价文件.合同,或者一些医院出示的给保险机构的病历资料等,有时候可能都希望快速的使用电子签章的处理方式来给文件盖上特定的印章,本篇随笔介绍基于Vue&am ...

随机推荐

  1. Gradle AndroidStudio内网离线构建配置踩坑记录

    最近一家新公司,由于办公环境都是在内网机上,导致在Unity导出android工程后,gradle离线构建也是第一次搞,花了一天时间也踩了一些坑,最后也终于构建成功了,这里记录下,方便大家少走些弯路. ...

  2. Azure Service Bus(一)入门简介

    一,引言 今天开始学习新的内容 Azure Service Bus(服务总线),其实也叫 "云消息服务",和 RabbitMQ,KafKa的一样都是作为消息通信服务,但是它们直接还 ...

  3. windows服务器安装exe文件出错

    今天在安装exe文件的时候出现了错误,记录如下: 服务器环境为windows 2016数据中心标准英文版.要安装的软件为***.exe.按照在本地电脑上安装的方法,直接双击打开,然后错误出现如下图: ...

  4. 【vue】入门介绍

    一.前端开发工具vscode 前端代码编写工具,使用vscode:vscode官网 安装好之后,可以先装如下几个插件,方便后续的开发. 二.编写代码 1.vscode快捷键生成html代码 在vsco ...

  5. Android Studio连接手机调试教程已决解

    Android Studio连接手机调试教程 Windows电脑连接安卓手机需要下载安装驱动,确保电脑联上网络. 准备条件: 1.电脑上安装应用宝软件. 2.手机开发者选项里面打开USB调试,USB安 ...

  6. java数组之system.arrayCopy

    public class ArrayDemo { /* public static void main(String[] args) { int[] a=new int[4]; int[] b=new ...

  7. 企业集群架构-03-NFS

    NFS 目录 NFS NFS基本概述 NFS应用场景 NFS实现原理 NFS总结 NFS服务端安装 环境准备 服务端安装NFS 服务端NFS配置 服务端开机自启 服务端验证配置 NFS客户端挂载卸载 ...

  8. 通过python的socket库实现简易即时通讯小程序

    前言 最近学习了一下有关tcp协议和socket有关的知识,看到许多socket实战都喜欢教如何做一个聊天程序,于是想着试试能不能不看教程自己写一个.当然我没太多时间做一个像qq一样的ui界面,所以做 ...

  9. PHP 导入Excel数据 到数据库

    /** * 导入excel * @throws \PHPExcel_Exception * @throws \PHPExcel_Reader_Exception */ public function ...

  10. tomcat版本号修改已dwr配置错误安全漏洞整改

    1.tomcat版本信息泄露修改方法:tomcat6是在tomcat/lib 下使用jar xf catalina.jar 解压这个jar包会得到两个目录:META-INF和org其中org\apac ...