Hexo Butterfly博客添加Google分析
Hexo Butterfly博客添加Google分析进入谷歌分析官网:https://analytics.google.com/analytics/web/如下图所示: 点击开始评估 输入账户名,随便填就行,点击下一步 输入属性名称(随便填),填上你的博客域名,点击下一步 剩下的步骤按自己的情况填就行 最后会弹出一个弹窗,上面会有一个跟踪id,一般以UA开头,将它复制下来,在_config.butterfly.yml文件中搜索google_analytics,在这个后面把你的跟踪id填进去,如下所示: 如果你小心把谷歌分析的网址关了,应该怎么找跟踪id呢? 进入后台,点击管理: 找到资源存取管理,点击: 点开查看使用者的账户详细资料就能找到: 下图我打红色码的就是跟踪id: 更改好了以后,重新部署博客,最后看到这样的页面: 就大功告成啦!
Retrofit2简明讲解
Retrofit2简明讲解什么是Retrofitretrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了okhttp。准确来说,Retrofit是一个RESTful的http网络请求框架的封装。因为网络请求工作本质上是由okhttp来完成,而Retrofit负责网络请求接口的封装。 本质过程:App应用程序通过Retrofit请求网络,实质上是使用Retrofit接口层封装请求参数,即Header、Url等信息,之后由okhttp来完成后续的请求工作。在服务端返回数据后,okhttp将原始数据交给Retrofit,Retrofit根据用户需求解析。 使用介绍使用 Retrofit 的步骤共有7个: 步骤1:添加Retrofit库的依赖步骤2:创建 接收服务器返回数据 的类步骤3:创建 用于描述网络请求 的接口步骤4:创建Retrofit实例 并 创建网络请求接口实例步骤5:发送网络请求(异步 / 同步) 步骤1:添加Retrofit库的依赖如图所示: 步骤2:创建 接收服务器返回数据 的类在正式的请求网络数据中,返回的数据的外嵌套部分都是一样的,携 ...
DDD架构之端口
DDD架构之端口在领域驱动设计(DDD)的上下文中,适配器(Adapter)模式扮演着至关重要的角色。适配器模式允许将不兼容的接口转换为另一个预期的接口,从而使原本由于接口不兼容而不能一起工作的类可以协同工作。在DDD中,适配器通常与端口(Port)概念结合使用,形成”端口和适配器”(Ports and Adapters)架构,也称为”六边形架构”(Hexagonal Architecture)。这种架构风格旨在将应用程序的核心逻辑与外部世界的交互解耦。 概念Port 在这种架构中代表了应用程序的一个入口或出口点。它定义了一个与外部世界交互的接口,但不关心具体的实现细节。端口可以是驱动端口(Driving Ports,通常是输入端口)或被驱动端口(Driven Ports,通常是输出端口)。 特性 抽象性:端口提供了服务行为的抽象描述,明确了服务的功能和外部依赖。 独立性:端口独立于具体实现,允许服务实现的灵活替换或扩展。 灵活性:可以为同一端口提供不同的适配器实现,以适应不同的运行环境或需求。 用途 标准定义:端口和适配器定义了服务的标准行为和外部依赖,提高了代码的可读性和可维护性 ...
OpenAI SDK开发(2)
OpenAI SDK开发(2) okhttp3的sse流式应答设计本次开发完成了流式应答,主要使用的就是okhttp3的eventsource 流程验证跟之前的主要区别就是需要使用eventsource来监听流式应答,要将ChatCompletionRequest中的stream参数设置为true,以okHttpClient开启EventSource Factory,以全新的request格式传递数据 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354@Test public void test_client_stream() throws JsonProcessingException, InterruptedException { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); http ...
DDD架构之仓储
DDD架构之仓储Repository(仓储)模式是一种设计模式,它用于将数据访问逻辑封装起来,使得领域层可以通过一个简单、一致的接口来访问聚合根或实体对象。这个模式的关键在于提供了一个抽象的接口,领域层通过这个接口与数据存储层进行交互,而不需要知道背后具体的实现细节。 特性 封装持久化操作:Repository负责封装所有与数据源交互的操作,如创建、读取、更新和删除(CRUD)操作。这样,领域层的代码就可以避免直接处理数据库或其他存储机制的复杂性。 领域对象的集合管理:Repository通常被视为领域对象的集合,提供了查询和过滤这些对象的方法,使得领域对象的获取和管理更加方便。抽象接口:Repository定义了一个与持久化机制无关的接口,这使得领域层的代码可以在不同的持久化机制之间切换,而不需要修改业务逻辑。 用途 数据访问抽象:Repository为领域层提供了一个清晰的数据访问接口,使得领域对象可以专注于业务逻辑的实现,而不是数据访问的细节。 领域对象的查询和管理:Repository使得对领域对象的查询和管理变得更加方便和灵活,支持复杂的查询逻辑。 领域逻辑与数据存储分离: ...
DDD架构之领域,聚合,实体,值对象
DDD架构之领域,聚合,实体,值对象Domain(领域)在DDD中,领域是指具体业务领域的知识、业务逻辑、数据以及业务规则的集合。它是软件要解决问题的业务环境,通常由一系列子领域组成,每个子领域代表业务中的一个特定部分。 领域的特性 业务中心:领域是围绕业务需求和业务规则构建的,它是软件设计的核心。 模型驱动:领域模型是对业务知识的抽象,它通过领域实体、值对象、服务、聚合等概念来表达。 语言一致性:领域模型的构建基于统一语言(Ubiquitous Language),这是开发团队与业务专家共同使用的语言,确保沟通无歧义。 边界清晰:领域模型定义了清晰的边界,这些边界划分了不同的子领域和聚合,有助于管理复杂性和维护性。 领域的用途业务逻辑的封装:领域模型封装了业务逻辑,使得业务规则和数据操作集中管理,便于理解和维护。沟通工具:领域模型作为开发团队与业务专家之间的共同语言,有助于提高沟通效率,确保软件开发紧密跟随业务需求。软件设计的基础:领域模型是软件设计的基础,它指导着软件的架构和实现。 实现手段 实体(Entity):具有唯一标识的领域对象,代表业务中的实体。 值对象(Value O ...