当前位置: 首页 > news >正文

【DDD架构】

DDD(domain driven design)领域驱动设计模型

一、DP(domain primitive)

1、什么是DP

dp是一种基本类型,包括type(数据类型)和class(类)。

public class PhoneNumber {private final String number;public String getNumber() {return number;}public PhoneNumber(String number) {if (number == null) {throw new ValidationException("number不能为空");} else if (isValid(number)) {throw new ValidationException("number格式错误");}this.number = number;}public String getAreaCode() {for (int i = 0; i < number.length(); i++) {String prefix = number.substring(0, i);if (isAreaCode(prefix)) {return prefix;}}return null;}private static boolean isAreaCode(String prefix) {String[] areas = new String[]{"0571", "021", "010"};return Arrays.asList(areas).contains(prefix);}public static boolean isValid(String number) {String pattern = "^0?[1-9]{2,3}-?\\d{8}$";return number.matches(pattern);}}

如上例子,将于电话号相关的逻辑完整的收集到一个文件(class)中,形成了phoneNumber这个type

2.为什么要用DP

在这里插入图片描述
案例分析

一个新应用在全国通过 地推业务员做推广,需要做一个用户注册系统,同时希望在用户注册后能够通过用户电话(先假设仅限座机)的地域(区号)对业务员发奖金。

传统代码:

public class User {Long userId;String name;String phone;String address;Long repId;
}public class RegistrationServiceImpl implements RegistrationService {private SalesRepRepository salesRepRepo;private UserRepository userRepo;public User register(String name, String phone, String address) throws ValidationException {// 校验逻辑if (name == null || name.length() == 0) {throw new ValidationException("name");}if (phone == null || !isValidPhoneNumber(phone)) {throw new ValidationException("phone");}// 此处省略address的校验逻辑// 取电话号里的区号,然后通过区号找到区域内的SalesRepString areaCode = null;String[] areas = new String[]{"0571", "021", "010"};for (int i = 0; i < phone.length(); i++) {String prefix = phone.substring(0, i);if (Arrays.asList(areas).contains(prefix)) {areaCode = prefix;break;}}SalesRep rep = salesRepRepo.findRep(areaCode);// 最后创建用户,落盘,然后返回User user = new User();user.name = name;user.phone = phone;user.address = address;if (rep != null) {user.repId = rep.repId;}return userRepo.save(user);}private boolean isValidPhoneNumber(String phone) {String pattern = "^0[1-9]{2,3}-?\\d{8}$";return phone.matches(pattern);}
}

DDD架构代码:

public class PhoneNumber {private final String number;public String getNumber() {return number;}public PhoneNumber(String number) {if (number == null) {throw new ValidationException("number不能为空");} else if (isValid(number)) {throw new ValidationException("number格式错误");}this.number = number;}public String getAreaCode() {for (int i = 0; i < number.length(); i++) {String prefix = number.substring(0, i);if (isAreaCode(prefix)) {return prefix;}}return null;}private static boolean isAreaCode(String prefix) {String[] areas = new String[]{"0571", "021", "010"};return Arrays.asList(areas).contains(prefix);}public static boolean isValid(String number) {String pattern = "^0?[1-9]{2,3}-?\\d{8}$";return number.matches(pattern);}}public class User {UserId userId;Name name;PhoneNumber phone;Address address;RepId repId;
}public User register(@NotNull Name name,@NotNull PhoneNumber phone,@NotNull Address address
) {// 找到区域内的SalesRepSalesRep rep = salesRepRepo.findRep(phone.getAreaCode());// 最后创建用户,落盘,然后返回,这部分代码实际上也能用Builder解决User user = new User();user.name = name;user.phone = phone;user.address = address;if (rep != null) {user.repId = rep.repId;}return userRepo.saveUser(user);
}

2.1 API接口清晰度

调用时:

public User register(String, String, String)

传统代码可能会出现如下错误:

service.register("张三", "北京", "0731-88888888")

这个错误是编译无法发现的

DDD架构代码:

public User register(Name, PhoneNumber, Address);
service.register(new Name("张三"), new Address("北京"), new PhoneNumber("0731-88888888"))

2.2 数据验证和错误处理

public User register(@NotNull Name name,@NotNull PhoneNumber phone,@NotNull Address address
)

DP参数一定是正确的或null, 将数据验证前置到了调用方

2.3 业务代码的清晰度

DDD只剩下核心业务逻辑

3.DP原则

3.1 将隐性的概念显性化

3.2 将隐性的上下文显性化

3.3 封装多对象行为

4. DP与DTO

在这里插入图片描述

5.DP使用场景

  • 有格式限制的 String:比如Name,PhoneNumber,OrderNumber,ZipCode,Address等
  • 有限制的Integer:比如OrderId(>0),Percentage(0-100%),Quantity(>=0)等
  • 可枚举的 int :比如 Status(一般不用Enum因为反序列化问题)
  • Double 或 BigDecimal:一般用到的 Double 或 BigDecimal 都是有业务含义的,比如 - Temperature、Money、Amount、ExchangeRate、Rating 等
  • 复杂的数据结构:比如 Map<String, List> 等,尽量能把 Map 的所有操作包装掉,仅暴露必要行为

二、DDD架构推演

传统三层架构(UI、业务层、基础设施层)

在这里插入图片描述
缺点:高耦合、上层对下层强依赖

1.抽象数据存储层

1.1 将data access层做抽象,降低系统对数据库的直接依赖

方法

  • 新建实体类entity
    实体是拥有id的域对象,包括数据和行为。实体与数据存储格式无关,在设计中以该领域的通用严谨语言为依据。避免了其他业务逻辑和数据库的直接耦合,避免可当数据库字段变化时大量业务逻辑也跟着变的问题。
  • 新建对象储存接口类repository
    repository只负责entity的存储和读取,而repository的实现类实现数据库存储的细节。通过repository接口,底层数据库链接可以通过不同的实现类而替换。让业务逻辑不在面向数据库编程,而是面向领域模型编程。

概念区别

  1. DO和entity
    DO是单纯的和数据库表的映射关系,每个字段对应数据库表的一个column,这种对象叫Data Object。DO只有数据,没有行为。AccountDO的作用是对数据库做快速映射,避免直接在代码里写SQL。无论你用的是MyBatis还是Hibernate这种ORM,从数据库来的都应该先直接映射到DO上,但是代码里应该完全避免直接操作 DO。
    entity字段和数据库储存不需要有必然的联系。Entity包含数据,同时也应该包含行为。字段尽可能用 Domain Primitive 代替,可以避免大量的校验代码。
  2. DAO和repository
    DAO对应的是一个特定的数据库类型的操作,相当于SQL的封装。所有操作的对象都是DO类,所有接口都可以根据数据库实现的不同而改变。比如,insert 和 update 属于数据库专属的操作。
    Repository对应的是Entity对象读取储存的抽象,在接口层面做统一,不关注底层实现。比如,通过 save 保存一个Entity对象,但至于具体是 insert 还是 update 并不关心。Repository的具体实现类通过调用DAO来实现各种操作,通过Builder/Factory对象实现AccountDO 到 Account之间的转化
    在这里插入图片描述
    repositoryImpl实现类,由于其职责被单一拎出来,因此只需要关注entity对象到DO之间的映射关系以及repository方法到DAO方法之间的映射。

2.抽象第三方服务

解决第三方不可控、入参出参强耦合的问题,最常用的设计模式是防腐层

2.1 防腐层ACL

防腐层原则是:外部一切不可信
作用:

  1. 适配器:外部数据、接口和协议可能不符合内部规范,将数据转化逻辑封装到ACL内部。
  2. 缓存:对于频繁调用且数据变更不频繁的外部依赖,通过在ACL里嵌入缓存逻辑,能够有效的降低对于外部依赖的请求压力。同时,很多时候缓存逻辑是写在业务代码里的,通过将缓存逻辑嵌入ACL,能够降低业务代码的复杂度。
  3. 兜底:如果外部依赖的稳定性较差,一个能够有效提升我们系统稳定性的策略是通过ACL起到兜底的作用,比如当外部依赖出问题后,返回最近一次成功的缓存或业务兜底数据。这种兜底逻辑一般都比较复杂,如果散落在核心业务代码中会很难维护,通过集中在ACL中,更加容易被测试和修改。
  4. 易于测试:类似于之前的Repository,ACL的接口类能够很容易的实现Mock或Stub,以便于单元测试。
  5. 功能开关:有些时候我们希望能在某些场景下开放或关闭某个接口的功能,或者让某个接口返回一个特定的值,我们可以在ACL配置功能开关来实现,而不会对真实业务代码造成影响。同时,使用功能开关也能让我们容易的实现Monkey测试,而不需要真正物理性的关闭外部依赖。
    在这里插入图片描述

3.抽象中间件

在这里插入图片描述

4.封装业务逻辑

  • 用Domain Primitive封装跟实体无关的无状态计算逻辑

  • 用Entity封装单对象的有状态的行为,包括业务校验

  • 用Domain Service封装多对象逻辑
    在这里插入图片描述
    经过重构后的代码有以下几个特征:

  • 业务逻辑清晰,数据存储和业务逻辑完全分隔。

  • Entity、Domain Primitive、Domain Service都是独立的对象,没有任何外部依赖,但是却包含了所有核心业务逻辑,可以单独完整测试。

  • 原有的TransferService不再包括任何计算逻辑,仅仅作为组件编排,所有逻辑均delegate到其他组件。这种仅包含Orchestration(编排)的服务叫做Application Service(应用服务)。
    在这里插入图片描述

整理后:
在这里插入图片描述

  • 最底层不再是数据库,而是Entity、Domain Primitive和Domain Service。这些对象不依赖任何外部服务和框架,而是纯内存中的数据和操作。这些对象我们打包为Domain Layer(领域层)。领域层没有任何外部依赖关系。
  • 再其次的是负责组件编排的Application Service,但是这些服务仅仅依赖了一些抽象出来的ACL类和Repository类,而其具体实现类是通过依赖注入注进来的。Application Service、Repository、ACL等我们统称为Application Layer(应用层)。应用层 依赖 领域层,但不依赖具体实现。
  • 最后是ACL,Repository等的具体实现,这些实现通常依赖外部具体的技术实现和框架,所以统称为Infrastructure Layer(基础设施层)。Web框架里的对象如Controller之类的通常也属于基础设施层。

5.DDD架构图

在这里插入图片描述

6.依赖关系图

在这里插入图片描述

7.模型所在模块和转化器

在这里插入图片描述

三、Repository

1.change-tracking变更追踪

repository是对聚合根进行操作,一个聚合根可能包括多个entity,当其中1个entity改变其他不改变时,需要找到这个改变的entity,即变更追踪。
有一下2个主流方法:
1.基于snapshot
当数据从DB里取出来后,在内存中保存一份snapshot,然后在数据写入时和snapshot比较。
2.基于proxy

四、领域层设计规范

传统OOP代码问题:

  1. 业务规则的归属到底是对象的“行为”还是独立的”规则对象“?
  2. 业务规则之间的关系如何处理?
  3. 通用“行为”应该如何复用和维护?

声明:本文是个人学习笔记
参考自:
https://zhuanlan.zhihu.com/p/340911587
https://zhuanlan.zhihu.com/p/343388831
https://zhuanlan.zhihu.com/p/348706530
https://zhuanlan.zhihu.com/p/356518017

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

带你了解DDoS攻击的原理,让你轻松学会DDoS攻击原理及防护措施

DDoS攻击原理是什么? 随着网络时代的到来&#xff0c;网络安全变得越来越重要。在互联网的安全领域&#xff0c;DDoS(Distributed DenialofService)攻击技术因为它的隐蔽性&#xff0c;高效性一直是网络攻击者最青睐的攻击方式&#xff0c;它严重威胁着互联网的安全。接下来的…...

小区物业管理系统-物业管理员页面

小区物业管理系统-物业管理员页面 主页面 添加业主 Public Class PropertyManager_Pro_insertbug:插入&#xff1a;若删除一个&#xff0c;用count就会插入相同的&#xff0c;导致插入错误Dim proprietor As New ProprietorPublic Sub New(s As String)InitializeComponent()E…...

Python数学问题20:高空抛物

1. 问题描述 一球从100米高度自由落下&#xff0c;每次落地后反跳回原高度的一半&#xff1b;再落下&#xff0c;求它在第10次落地时&#xff0c;共经过多米&#xff1f;第10次反弹多高&#xff1f; 2. 实例代码 high 200 total 100 for i in range(10):high / 2total hi…...

SQL Server 执行计划(1)- 概述

在本系列文章中&#xff0c;我们将导航 SQL Server 执行计划的海洋&#xff0c;从定义执行计划的概念开始&#xff0c;遍历执行计划的类型、组件和运算符&#xff0c;分析执行计划&#xff0c;我们将完成如何保存和管理执行计划。 SQL Server 执行计划概述 当你提交一个 T-SQ…...

阿里程序员的Java之路!Redis宕机数据丢失解决方案

二叉树 定义 二叉树是n(n>0)个结点的有限集合&#xff0c;该集合或者为空集&#xff08;称为空二叉树&#xff09;&#xff0c;或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。 图解 二叉树特点 由二叉树定义以及图示分析得出二叉树有以下特点…...

最全面的 Spring 学习笔记

最全面的 Spring 学习笔记...

html基础

文章目录day01_web一、Web前端介绍1. 什么是网页2. 网页的组成3. 开发前的准备二、 HTML语法介绍1. HTML介绍2. 标签3. 使用三、常用标签介绍1. 基本结构解析2. body中常用标签3. 常用结构标签属性和属性值day01_web 一、Web前端介绍 1. 什么是网页 网页是基于浏览器的应用程…...

pt-osc工具原理与实践

MySQL在5.7版本对于online ddl支持的并不是非常优化&#xff0c;比如说将大表int字段类型修改成bigint或者对大表进行字符编码的改造。对于业务来说都是需要停业去处理的&#xff0c;对于高速发展的互联网行业来说&#xff0c;时间就是金钱&#xff0c;所以合理的应用pt-osc工具…...

Unity ILRuntime编译命令

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe F:\UnityProjects\Test\Assets\Samples\ILRuntime\1.6.7\Demo\HotFix_Project~\HotFix_Project.csproj /t:Rebuild /p:ConfigurationRelease pause...

Keyhole Markup Language (KML)

5. KML-Keyhole Markup Language From https://developers.google.com/kml/documentation/kml_tut?hlzh-CN KML 是一种文件格式&#xff0c;用于在地球浏览器&#xff08;例如 Google 地球、Google 地图和谷歌手机地图&#xff09;中显示地理数据。KML 使用含有嵌套的元素和…...

idea复制当前行快捷键

仅作为记录&#xff0c;大佬请跳过。 在该行的任何位置&#xff0c;直接用ctrl和c即可 参考 感谢大佬博主文章&#xff1a;传送门...

不抛弃异常值的几种情况

异常数据是数据分布的常态,处于特定分布区域或范围之外的数据 通常会被定义为异常或“噪音”。产生数据“噪音”的原因很多,例如业务 运营操作、数据采集问题、数据同步问题等。对异常数据进行处理前, 需要先辨别出到底哪些是真正的数据异常。 从数据异常的状态看分为两 种…...

23种设计模式

一、什么是设计模式 设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问&#xff0c;设计模式于己于他人于系统都是多…...

Nacos 2.0.2正式版发布

一、介绍Nacos Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用…...

spring框架的各种注解基本意思

//在 spring 配置文件中开启生成代理对象 <!-- 开启 Aspect 生成代理对象--> <aop:aspectj-autoproxy></aop:aspectj-autoproxy>Autowired //根据属性类型进行自动装配 Aspect //生成代理对象 Qualifier //根据名称进行注 Resource //可以根据类型注…...

【Java45】旅游案例:数据回显,注销/退出,首页类别显示,精选

文章目录1.登陆数据回显1.1 前端2.登陆案例_注销/退出3.首页类别显示3.1 web3.2 service3.3 dao4.精选4.1 web4.2 service4.3 dao4.4 前端1.登陆数据回显 如上前端写在header.html中。 1.1 前端 //header.html <!-- 头部 start --><header id"header2"&g…...

axios跨域问题

项目配置 vue-cli3vue2element-ui-2.15.3 在网上找了很多方案&#xff0c;但是都没有生效&#xff0c;最后是前端添加了一段代码&#xff0c;后台添加了一段代码 解决了 添加了headers的配置 const instance axios.create({// baseURL: http://mall.huolida.com/,// baseUR…...

原创-Kafka原理

Kafka原理 2017年09月22日 22:39:45317人阅读 评论(0) 收藏 举报 分类&#xff1a; Kafka&#xff08;1&#xff09; 目录(?)[] Kafka 这段时间研究RabbitMQ、Kafka、RocketMQ消息队列&#xff0c;发现对她们原理的介绍都过于简单&#xff0c;所以整理了众多资料&…...

ef dbcontext

dbcontext class 用来crud数据库&#xff0c;也用来配置实体类&#xff0c;关系映射&#xff0c;缓存&#xff0c;事务&#xff0c;变化追踪等 using System.Data.Entity;public class SchoolContext : DbContext {public SchoolContext(){}// Entities public DbSet&l…...

C语言中的整型提升

C语言中的整型提升 提到整型提升,可能刚学c语言的小伙伴们很头疼这个知识点吧,下面我就我的理解简单分析一下整型提升是怎么回事. 首先还是介绍一下整型提升的概念: ​ c的整型算术运算总是至少以缺省整型类型的精度来进行的. 为了获得这个精度,表达式中的字符和短整型操作数在…...

从入门到放弃:Markdown中的LaTeX使用教程

LaTeX CSDN不支持显示的语法我已用 标注显示 基本语法 展现形式 在正文中的LaTeX公式用$...$定义行内公式&#xff0c;$$...$$单独居中显示 希腊字母 显示命令显示命令α\alphaβ\betaγ\gammaδ\deltaε\epsilonζ\zetaη\etaθ\thetaι\iotaκ\kappaλ\lambdaμ\muν\…...

2021-2027全球与中国PVC医药包装(单片制药包装)市场现状及未来发展趋势

报告摘要 本文研究全球及中国市场PVC医药包装&#xff08;单片制药包装&#xff09;现状及未来发展趋势&#xff0c;侧重分析全球及中国市场的主要企业&#xff0c;同时对比北美、欧洲、中国、日本、东南亚、印度等地区的现状及未来发展趋势。 2020年全球PVC医药包装&#xff…...

前端类库开发最佳实践

Yarn Lerna Rollup 示例项目 Yarn 通过使用 Yarn 的工作区功能&#xff0c;让 Yarn 根据就依赖关系帮助你分析所有子项目的公共依赖&#xff0c;让所有的子项目的公共依赖只会被下载和安装一次。 Lerna 通过 Lerna 可以将一系列相互耦合比较大、又相互独立的库进行管理&…...

用 Python 进行游戏开发

1. pgzero python在各个领域都有着丰富的第三方库,pygame是python在游戏领域的应用库,可以用来开发各种不同的游戏。但是对于初学者来说,还是存在一定的门槛。 而今天要和大家分享的pgzero(pygame zero)是在pygame基础上做了进一步的封装,使得设计一款游戏十分的方便,…...

用 Python 进行 OCR 图像识别

数据采集就怕遇到图片,只能看不能复制怎么办。手动将文字提取出来,要耗费很大的工作量。 例如下图,某楼盘的一房一价表,怎么样发现单价低位的房子?光凭肉眼很难发现吧,能否让计算机进行文字的识别,然后再对这些数值型信息进行数据分析? 首先把图片中的单价提取出来, …...

数据结构与算法常用总结

数据结构1.常用数据结构及其原理1.1 数组1.2 链表1.3 队列1.4 栈1.5 哈希表1.6 二叉树2.常见数据结构面试题2.1数组和链表的区别2.2 排序算法2.3 栈结构与队列的区别1.常用数据结构及其原理 1.1 数组 每一个数组元素的位置由数字编号&#xff0c;称为下标或者索引(index)。大根…...

解决for循环中异步请求顺序不一致的问题

解决for循环中异步请求顺序不一致的问题参考文章&#xff1a; &#xff08;1&#xff09;解决for循环中异步请求顺序不一致的问题 &#xff08;2&#xff09;https://www.cnblogs.com/mo3408/p/12163012.html 备忘一下。...

Spring学习:工厂方法创建 Bean

目录通过调用静态工厂方法创建 Bean通过调用实例工厂方法创建 Bean通过调用静态工厂方法创建 Bean 调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中。当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节。 要声明通过静态方法创建的 Bean:…...

PO / PO和 ERP的配置

一、前言 PO / PI 是SAP公司的一个中间件产品&#xff0c;用来辅助SAP系统和外围系统&#xff0c;( 当然外围系统也可以使用PO)。 PO可以完成一些数据内容转换,群发(一份数据发给多个异构系统),分发(数据区分特征发送给特定的系统)等功能. 二、ERP端 ERP和 PO的连接&#x…...

JS获取当前日期、当前月第一天、当前月最后一天

js获取当前时间YYYY-MM-DD HH:MM:SS getNowTime: function () {let yy new Date().getFullYear()let mm new Date().getMonth() 1let dd new Date().getDate()let hh new Date().getHours()let mf new Date().getMinutes() < 10 ? 0 new Date().getMinutes():new D…...

SOA 基础知识简介

想要获得面向服务的体系架构&#xff08;Service-Oriented Architecture&#xff0c;SOA&#xff09;方面的认证吗&#xff1f;想要赶上 SOA 的浪潮吗&#xff1f;学习本教程&#xff0c;为准备 IBM SOA 基础知识考试做好准备&#xff0c;以获 IBM Certified SOA Associate 证书…...

考试总结

#1. server 主机配置 mariadb 服务如下: - 该服务阻断所有来自网络的 tcp/ip 连接,仅支持本地连接; - 给数据库设置密码 fentiao ; - 新建数据库 westosinfo ,该数据库中创建表 hostinfo ; - hostinfo 表包含的字段为 ip 和 hostname ,表中插入 3 条记录(自己随便写); - 创建用…...

软考必过 - 系统架构师 - 软件架构设计 - SOA与微服务

世界上并没有完美的程序&#xff0c;但是我们并不因此而沮丧&#xff0c;因为写程序就是一个不断追求完美的过程。 文章目录软件架构设计面向服务的架构&#xff08;SOA&#xff09;软件架构设计 面向服务的架构&#xff08;SOA&#xff09; SOA特点 粗粒度低耦合标准化接口 …...

骰子游戏-第11届蓝桥杯Scratch选拔赛真题精选

[导读]&#xff1a;超平老师计划推出Scratch蓝桥杯真题解析100讲&#xff0c;这是超平老师解读Scratch蓝桥真题系列的第94讲。 蓝桥杯选拔赛每一届都要举行4~5次&#xff0c;和省赛、国赛相比&#xff0c;题目要简单不少&#xff0c;再加上篇幅有限&#xff0c;因此我精挑细选…...

IBM SOA 解决方案设计师认证考试准备,第 1 部分:SOA 最佳实践

本系列教程将协助您通过 IBM 认证考试 Test 665&#xff1a;SOA 解决方案架构设计。注册 IBM SOA 企业架构师工具包 V2.0 获取此认证教程。 专门为企业架构师准备的这一免费工具包提供了一系列材料&#xff0c;能帮助您更好地&#xff1a; 通过企业架构过程进行设计 将您的业务…...

基于WEB的在线选课系统(asp.net)

目  录 摘要 I Abstract II 第1章 绪论 1 1.1 课题背景 1 1.2 目的和意义 1 1.3 系统设计思想 2 第2章 可行性分析 3 2.1 管理可行性 3 2.2 经济可行性 4 2.2.1 系统初期投资 4 2.2.2 系统货币的时间价值 4 2.2.3 投资回收期 5 2.2.4 纯收入 5 2.3 技术可行性 5 2…...

仿阿里云后台管理界面模板html源码——后台

链接&#xff1a;http://pan.baidu.com/s/1nuH2SPj 密码&#xff1a;ar8o 转载于:https://www.cnblogs.com/wordblog/p/6790899.html...

阿里云后台服务器IIS安装与配置

登陆服务器后找到服务器管理器 1、点击添加角色和功能&#xff0c;点击下一步 2、安装类型和服务器选择直接点击下一步即可 3、服务器角色选择对应的Web服务器&#xff08;IIS&#xff09; 选择所需功能&#xff0c;一般安全性、常见HTTP功能、性能、运行状态和诊断基本管理工…...

阿里云上发布自己的网站的方法

在阿里云上发布自己的网站的方法&#xff1a; 一、在阿里云上发布自己的网站的方法&#xff1a; 进入我的电脑&#xff0c;在头部输入ftp&#xff1a;//60.205.48.122&#xff08;IP地址为自己注册的阿里云账号上的IP地址&#xff09; 进入以后登录自己的账号 用户名&#x…...

阿里云oss文件服务器

目录1.后台提供OSS签名API1.1.OSS参数配置1.2.签名接口2.后台提供OSS签名API2.1.上传组件2.2. JS获取签名1.后台提供OSS签名API 1.1.OSS参数配置 file:alicloud:bucket-name: itsource-hrm #上传空间bucketaccess-key: LTAI4GBU4kV67teSKSzkKpxN #你的keysecret-key: 0f9Djm2…...

阿里云漏洞验证需要付费的解决方法

阿里云服务器提示漏洞&#xff0c;修复需要付费&#xff0c;验证需要付费&#xff0c;是因为阿里云帮你解决漏洞&#xff0c;收费也是应该的。咱们今天说的是免费解决方法。新用户会给个七天的免费修复验证&#xff0c;七天后就不能试用 咱们现在说非七天试用。 1、 修复漏洞&…...

阿里云添加管理员用户进行协作

阿里云怎么添加管理员来协助工作呢&#xff1f; 1.首先进入你的主账号&#xff0c;点击右上方的选项控制台&#xff0c;然后把鼠标放到右上角的头像上&#xff0c;会出现如下图的列表&#xff1a; 2.点击访问控制&#xff0c;进入并开启访问控制 RAM 3.在用户管理界面进行新建用…...

使用阿里云日志服务

主要采集的服务有&#xff1a; 1、nginx服务访问日志 2、服务端后台&#xff08;java&#xff09;总输出日志打印 3、服务端后台&#xff08;java&#xff09;错误日志打印本次主要讲解第二和第三种服务端日期输出1、nginx日志采集使用这个 2、服务端日志采集使用这个正则-文本…...

在阿里云服务器上搭建MQTT服务

在云服务器中搭建MQTT 文章目录在云服务器中搭建MQTT前言一、安装mosquitto二、配置1.不允许匿名访问2.可以匿名访问云服务器的配置mosquitto 的基本命令三 查看于测试连接、发布、订阅前言 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协…...

阿里云服务器后台运行服务

xshell连接阿里云服务器下载东西的时候总是中断&#xff1a; 1&#xff09;可采用的一个方法&#xff0c;将命令换为&#xff1a; nohup git clone https://github.com/apache/flink.git >log.txt && &#xff1a; 指在后台运行nohup &#xff1a; 不挂断的运行&a…...

阿里云服务器搭建后台(Ubuntu)

前两天申请了阿里云服务器&#xff0c;开始了漫长的搭建服务器摸索之路&#xff0c;中间出现过太多的bug&#xff0c;为了大家可以少走弯路&#xff0c;将自己的方法和截图贴出来。正好有很多步骤只是为了验证&#xff0c;让服务器很乱&#xff0c;我也重新做一遍也好总结一下。…...

Jar包阿里云服务器后台运行

Jar包阿里云服务器后台运行 1、方法一 nohup java -jar xxx.jar &&&#xff1a;使用&命令后&#xff0c;作业被提交到后台运行&#xff0c;当前控制台没有被占用&#xff0c;但是一但把当前控制台关掉(退出帐户时)&#xff0c;作业就会停止运行。 nohub&#xf…...

阿里云后台部署全过程-1-云服务申请与配置

本文已收录至我的个人网站&#xff1a;阿里云后台部署全过程-1-云服务申请与配置 本系列文章&#xff0c;将分享我部署阿里云后台的整个过程&#xff0c;从云服务器的申请&#xff0c;到整个环境的搭建测试&#xff0c;再到域名的购买和ICP备案、网安备案&#xff0c;我都将进…...

阿里云后台部署全过程-6-HTTPS原理及配置

本文已收录至我的个人网站&#xff1a;阿里云后台部署全过程-6-HTTPS原理及配置 简介 web应用的网络通信&#xff0c;一般是基于HTTP协议&#xff0c;HTTP协议处于应用层&#xff0c;基于TCP/IP协议&#xff0c;又在其之上。 HTTP协议的一个特性是明文传输&#xff0c;这就决…...

微信小程序统一服务消息接口

微信小程序统一服务消息接口 公众号和小程序消息都可以在一个接口推送 统一服务消息下发接口&#xff0c;就是这个接口可以发送公众号或者小程序的消息。 之前小程序发送消息&#xff0c;有小程序的 api 接口&#xff0c;如果是发送公众号的消息&#xff0c;就有公众号的模板消…...