Web开发:ABP框架中的服务调用原则--避免服务之间的直接依赖

news2024/9/20 18:41:18

示意图

(Service之间可以相互调用,使用依赖倒置原则:例如某个服务可注入到另一个服务,用法:private readonly IyyyService _yyyService;) 

命名约定

  • WebAPI 控制器: 建议命名为 XXXXController 或 XXXXManagementController(也有的命名为XXXXManagementService,主要用于处理HTTP请求
  • 业务逻辑层服务(BLL): 命名为 XXXXService,主要用于增删改查和写基本逻辑,通常会被 Web API 控制器调用。
  • 数据访问层仓储(DAL): 使用 XXXXRepository 命名, ORM(对象关系映射)处理,很可能用到反射之类的技术。

接口定义

  • 通常,为了实现解耦和便于测试,建议为业务逻辑层服务 (XXXXService) 和数据访问层仓储 (XXXXRepository) 定义接口。这些接口可以放在 Application.Contracts 命名空间下。
  • 责任: 定义服务和仓储层的合同,以便于实现依赖注入和松耦合。

参数设计

  • 在设计业务逻辑层服务(BLL)的方法时,推荐使用列表类型作为输入参数和返回值,这样可以更好地支持批量操作,并提高代码的重用性。对于复杂的数据交互,可以考虑使用专门的 DTO(数据传输对象)。

调用关系

  • 一个 WebAPI 控制器不允许调用另一个 WebAPI 控制器。
  • 直接的控制器间调用可能会导致架构复杂度增加维护困难调试困难。更好的做法是通过服务层 (XXXXService) 进行协调,将所需的业务逻辑封装在服务层内部,然后由需要的控制器调用相应的服务方法来获取或处理数据。
  • 如果两个Webapi控制器相互注入,会导致循环依赖从而无法解析依赖,导致程序无法启动或启动后增加额外开销,影响系统稳定性

反例:

[HttpGet]
[Route("GetMenuAsync")]//MenuManageService.cs
public async Task GetMenuAsyncc(IputDto input)
{
    var com_list = (await _componentManageService.GetListAsync());
}


[HttpGet]
[Route("GetListAsync")]//componentManageService.cs
public async Task<PagedResultDto<ComponentTypeDto>> GetListAsync(ComponentTypeDto input)
{
    //省略方法
}

        综上所述,在实际开发过程中,尽量避免控制器之间的直接调用,而是通过共享的服务层来协调不同的业务需求,这样可以确保系统架构更加清晰、易于维护。

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

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

相关文章

Linux学习(15)-网络编程:滑动窗口、拥塞控制、udp

本节学习内容 1.滑动窗口&#xff08;1.滑动窗口的作用2.如果如果接收端填充的接收窗口为0&#xff0c;发送端接下来怎么处理3.糊涂窗口综合征4.tcp中nagle算法是什么&#xff09; 2.拥塞控制 3.udp协议特点及编程流程 本节可能会用到的指令 ifconfig查看自己的ip地址 pi…

Scrapy添加代理IP池:自动化爬虫的秘密武器

在网络爬虫的世界里&#xff0c;IP地址的频繁更换是防止被目标网站封禁的有效手段。通过在Scrapy中添加代理IP池&#xff0c;你可以轻松实现自动化的IP切换&#xff0c;提高数据抓取的效率和稳定性。今天&#xff0c;我们就来详细讲解一下如何在Scrapy中添加代理IP池&#xff0…

使用 nuxi analyze 命令分析 Nuxt 应用的生产包

title: 使用 nuxi analyze 命令分析 Nuxt 应用的生产包 date: 2024/8/29 updated: 2024/8/29 author: cmdragon excerpt: 使用 nuxi analyze 命令可以帮助你深入了解生产包的结构和大小,从而做出针对性的优化。通过定期分析生产包,你可以识别并解决性能瓶颈,提高应用的加…

Linux 数据结构 内核链表 栈

内核链表&#xff1a; 1.一种链表结构能够操作多种类型的数据对象 2.节点包含数据变成数据包含节点 /*Copyright (c) 2008-2012 Red Hat, Inc. <http://www.redhat.com>This file is part of GlusterFS.This file is licensed to you under your choice of the…

从雨滴到数据--双翻斗雨量传感器让雨量可视化

CG-04-D1双翻斗雨量传感器是一种重要的水文、气象仪器&#xff0c;主要用于测量自然界中的降雨量&#xff0c;并将降雨量转换为以开关量形式表示的数字信息量输出&#xff0c;以满足信息传输、处理、记录和显示等需求。以下是对双翻斗雨量传感器的详细介绍&#xff1a; 一、工…

手机号码归属地查询如何用PHP进行调用

一、什么是手机号归属地查询接口&#xff1f; 手机号码归属地查询接口又叫手机号归属地、手机号信息查询、手机号查询&#xff0c;通过手机号查询归属地信息、是否虚拟运营商等。该接口可支持三大运营商&#xff0c;移动、电信、联通等。 二、手机号归属地查询接口适用场景有…

《Toolformer: Language Models Can Teach Themselves to Use Tools》论文解读

0. 引言 《Toolformer: Language Models Can Teach Themselves to Use Tools》 论文主要探讨了语言模型&#xff08;LMs&#xff09;在解决新任务时的能力和局限性&#xff0c;并提出了一个名为 Toolformer 的新方法。该方法通过简单 API 接口将外部工具与 LMs 相结合&#xf…

趣味算法------过河卒

目录 ​编辑 题目描述 解题思路 具体代码 总结 问题描述&#xff1a; 解决方案&#xff1a; 代码实现&#xff1a; 关键点&#xff1a; 题目描述 棋盘上 A 点有一个过河卒&#xff0c;需要走到目标 B 点。卒行走的规则&#xff1a;可以向下、或者向右。同时在棋盘上 C…

海外仓系统是什么?你想要了解的都在这里

对从事海外仓经营的人来说&#xff0c;海外仓系统肯定是不陌生的。但是对一些刚进入海外仓领域的货代代理&#xff0c;或一些家庭海外仓的经营者来说&#xff0c;还是有些糊涂&#xff0c;不知道自己到底要不要引入这样的管理系统&#xff0c;引入海外仓系统之后到底能帮自己做…

尚品汇-订单接口实现(四十)

目录&#xff1a; &#xff08;1&#xff09;搭建service-order-client模块 &#xff08;2&#xff09;微服务之间用户信息传递 &#xff08;3&#xff09;在web-all模块中添加接口 &#xff08;4&#xff09;下订单 &#xff08;1&#xff09;搭建service-order-client模…

DDD设计方法-1-初识DDD

前情提要&#xff1a;一共包含 如下六篇文章&#xff08;篇幅精简&#xff0c;快速入门&#xff09; 1、初识DDD 2、聚合、实体、值对象 3、仓储&#xff0c;封装持久化数据 4、端口和适配器 5、领域事件 6、领域服务&#xff0c;实现约定 DDD设计理念-快速入门 DDD&#xff0…

雨水回用一体化设备

雨水回用一体化设备集提升、回用&#xff08;变频恒压供水&#xff09;、排泥系统&#xff1b;絮凝、消毒&#xff08;加药、紫外线&#xff09;、曝气系统&#xff1b;过滤&#xff08;初、精&#xff09;系统&#xff08;全自动自清洗过滤器/石英砂过滤器/多介质过滤器/精密碟…

没错,一分钟告诉你TCP和UDP之间的区别!

TCP (Transmission Control Protocol&#xff09;和UDP (User Datagram Protocol&#xff09;是两种常用的传输层协议&#xff0c;用于在计算机网络中传输数据。 TCP是一种面向连接的协议&#xff0c;提供可靠的数据传输。它通过建立连接、数据分段、流量控制、拥塞控制和错误校…

【论文阅读】skill code 和 one-shot manipulate

文章目录 1. Interpretable Robotic Manipulation from Language针对痛点和贡献摘要和结论引言模型框架实验思考不足之处 2. One-Shot Imitation Learning with Invariance Matching for Robotic Manipulation针对痛点和贡献摘要和结论引言模型框架实验 1. Interpretable Robot…

深入理解快排【C语言版】

目录 一、快排介绍及其思想 二、hoare版本 三、前后指针版 四、挖坑法 五、优化版本 5.1 三数取中 5.2 小区间优化 六 、非递归实现快排 七、三路划分 八、introsort 小结 一、快排介绍及其思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一…

掌握CompletableFuture,提升你的代码效率!

文章目录 1 CompletableFuture与线程池之间有什么关系&#xff1f;2 如何优化CompletableFuture的性能&#xff1f;3 实际项目中&#xff0c;以并行执行多个HTTP请求为例&#xff0c;你会如何优雅使用CompletableFuture 解决问题&#xff1f; 1 CompletableFuture与线程池之间有…

计算机毕业设计选题推荐-在线音乐网站-音乐专辑商城-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

埃隆·马斯克超级计算新里程碑:Cortex AI超级集群震撼亮相!

本周&#xff0c;科技界的超级明星埃隆马斯克再次引领潮流&#xff0c;他在超级计算领域的征途上迈出了令人瞩目的步伐。通过一段视频&#xff0c;他首次公开了最新命名的“Cortex”人工智能超级集群&#xff0c;这一壮举不仅标志着特斯拉“Giga Texas”工厂的又一次重大扩张&a…

LeetCode_sql_day17(1843.可疑银行账户)

描述&#xff1a; 表&#xff1a;Accounts ---------------------- | Column Name | Type | ---------------------- | account_id | int | | max_income | int | ---------------------- account_id 是这张表具有唯一值的列。 每行包含一个银行账户每月最大收入的…

提供开发资料 Hi3516CV610-00B/10B/20B/00S/20S/00G/20G 七个型号配置差异

根据功能不同&#xff0c; Hi3516CV610 分为七个不同型号版本: HI3516CV610-00B HI3516CV610-00B HI3516CV610-10B HI3516CV610-20B HI3516CV610-00S HI3516CV610-20S HI3516CV610-00G HI3516CV610-20G