Domain、BO、BIZ 三层的协作关系

Langchain分割方式 【代码】Langchain分割方式。 阅读详情

电商、银行、医疗三个领域的经典分层案例,展示 domain、bo、biz 三层的协作关系:

‌案例1:电商订单系统‌

‌1. Domain层(领域模型)
// domain/entity/Order.java
public class Order {
    private String orderId;
    private List<OrderItem> items;
    private OrderStatus status;

    // 领域行为:计算订单总价
    public BigDecimal calculateTotal() {
        return items.stream()
            .map(item -> item.getPrice().multiply(item.getQuantity()))
            .reduce(BigDecimal.ZERO, BigDecimal::add);
    }
}
‌2. BO层(业务对象)
// bo/OrderBO.java
public class OrderBO {
    private Order order;
    private InventoryService inventoryService;

    // 业务逻辑:校验库存并预留
    public void reserveInventory() {
        if (!inventoryService.checkStock(order.getItems())) {
            throw new BusinessException("库存不足");
        }
    }
}
‌3. Biz层(业务服务)
// biz/OrderService.java
public class OrderService {
    public void createOrder(OrderCreateDTO dto) {
        OrderBO orderBO = new OrderBO(convertToOrder(dto));
        orderBO.reserveInventory();  // 调用BO处理业务规则
        paymentService.charge(orderBO.getOrder());  // 协调第三方支付
    }
}

‌案例2:银行转账系统‌

‌1. Domain层
// domain/entity/Account.java
public class Account {
    private String accountId;
    private BigDecimal balance;

    // 领域行为:扣款
    public void debit(BigDecimal amount) {
        if (balance.compareTo(amount) < 0) {
            throw new InsufficientBalanceException();
        }
        this.balance = balance.subtract(amount);
    }
}
‌2. BO层
// bo/TransferBO.java
public class TransferBO {
    private Account source;
    private Account target;

    // 业务逻辑:执行双账户原子操作
    public void executeTransfer(BigDecimal amount) {
        source.debit(amount);
        target.credit(amount);  // 省略credit方法实现
    }
}
‌3. Biz层
// biz/TransferService.java
public class TransferService {
    @Transactional
    public void transfer(TransferRequestDTO dto) {
        TransferBO transferBO = new TransferBO(
            accountRepository.findById(dto.getSourceAccountId()),
            accountRepository.findById(dto.getTargetAccountId())
        );
        transferBO.executeTransfer(dto.getAmount());  // 调用BO
        auditLog.logTransfer(dto);  // 协调审计日志
    }
}

‌案例3:医院预约系统‌

‌1. Domain层
// domain/entity/Appointment.java
public class Appointment {
    private Doctor doctor;
    private Patient patient;
    private LocalDateTime time;

    // 领域规则:校验预约时间有效性
    public boolean isValidTime() {
        return time.getHour() >= 9 && time.getHour() <= 17;
    }
}
2. BO层
// bo/AppointmentBO.java
public class AppointmentBO {
    private Appointment appointment;
    private ScheduleService scheduleService;

    // 业务逻辑:检查医生排班冲突
    public void checkConflict() {
        if (!scheduleService.isAvailable(appointment.getDoctor(), appointment.getTime())) {
            throw new ConflictException("医生该时段已排班");
        }
    }
}
‌3. Biz层
// biz/AppointmentService.java
public class AppointmentService {
    public void bookAppointment(AppointmentDTO dto) {
        AppointmentBO appointmentBO = new AppointmentBO(convertToEntity(dto));
        appointmentBO.checkConflict();  // 调用BO校验
        notificationService.sendConfirmation(appointmentBO.getAppointment());  // 协调通知
    }
}

‌关键总结‌

  1. ‌Domain层‌:纯业务实体和规则,与技术无关
  2. ‌BO层‌:组合多个领域对象的业务场景逻辑
  3. ‌Biz层‌:协调领域逻辑与技术实现(如数据库、API调用)
  4. ‌适用场景‌:复杂业务系统(如金融、电商、医疗),简单CRUD项目可合并BO和Biz层
Axure RP9.0 教程:左侧菜单列表导航 ( 点击父级菜单,子菜单自动收缩或展开)【响应式的菜单导航】 1. 设置目标原件时,选择切换,这样就可以实现,当原件展示时,点击自动隐藏,隐藏时自动显示; 2. 展开/收起原件(推动/拉动原件)设置为方向**向下** 阅读详情

相关推荐

高级Salesforce开发面试题

自定义设置允许您创建自定义数据集,以及为组织、配置文件或特定用户创建和关联自定义数据。自定义元数据类似于自定义设置,但是自定义元数据类型中的记录被视为元数据而不是数据。自定义设置有列表和层次自定义设置两种。自定义元数据中没有此类类型。此外,自定义元数据不支持基于用户配置文件或特定用户的层次结构类型的数据。自定义设置现在不再支持关系字段。但您可以在自定义元数据对象之间创建查找。元数据查询不占用查询sql次数的限制。

weixin_45663522的博客 1239

Java开发学习笔记(二)

接口开发时注意点: 1、 从接口获取数据时,需要注意数据模型的定义 为了便于开发,避免数据混淆,需要注意分层模型规范 DO(Data Object): 与数据库表接口一一对应,通过DAO层向上级传输数据源对象 DTO(Data Transfer Object): 数据传输对象,Service或Manager向外界传输对象 BO(Business Object): 业务对象,...

u011752948的博客 449

Python实现ARIMA模型

以下是一个使用Python实现ARIMA(自回归移动平均模型)的简单示例代码。在运行代码之前,请确保已经安装了pandasnumpy和库。ARIMAorder(2,0,2)p = 2d = 0q = 2forecastmatplotlib在实际应用中,你需要将模拟数据替换为真实的时间序列数据,并且通过合适的方法(如信息准则等)来确定pdq的最佳值。除了auto_arima在使用pmdarima。

huanghm88的专栏 1736

解释Java工程中几种常见的包:PO,VO,DAO,BIZ,DTO,Service,ServiceImpl

Java工程中几种常见的包的含义和区别:PO,VO,DAO,BIZ,DTO,Service,ServiceImpl

Younk_Z的专栏 2万+

Win10下YOLOv8环境搭建避坑指南:从CUDA 11.6到cuDNN配置全流程

本文详细介绍了在Windows 10系统下搭建YOLOv8环境的完整流程,包括CUDA 11.6和cuDNN的配置步骤,以及常见问题的解决方案。通过硬件准备、软件安装、环境验证和性能优化等环节,帮助开发者高效完成YOLOv8环境配置,提升目标检测项目的开发效率。

defi6farmer的博客 224

rockchip rk3566 android11 网口log报错: DMA engine initialization failed

问题描述:上电初始化前将网口插入,然后上电初始化网口能够正常使用,且能够找到PHY,ifconfig 查看能够有eth0 产生,网口正常使用且能够热插拔,但上电初始化时,不插入网口,就会报DMA engine initialization failed 错误,DMA 初始化的时候出错了。 分析:一般产生这个问题可以认为是GMAC 的工作时钟出问题了。先测量时钟引脚是否有时钟,时钟频率以及幅度等指标是否正常,主要确认以下几个方面: 1.IOMUX 出错,检查时钟脚寄存器值是否正确。 2.时钟方向以及配置

qq_48709036的博客 2万+

java中的层:vo,dao,service,po,to,bo

最近在看java代码,今天接触两个分层:DAO和VO DAO层: 主要是与数据库打交道,做一些增删改查等; VO层: 主要是javaBean,我看的这一层代码里面全是get,set,toString等等。。 具体调用要看业务逻辑了,例如在dao层中,select 取出一个对象来,要把这个对象赋给vo里的一个具体的类,或者在action中,要用到其中的一个list里的值,list.get(i) 也要强制类型转换为vo层中的一个类,然后调用类中的get和set方法。 domain层: 就是对应的数据库表的实体类

MyNameIsWangYi的博客 3199

SAP 零售 FMS 物料主数据(一)

SAP 零售 FMS 物料主数据(一) SAP 对于鞋服行业最新的解决方案-FMS(相当于原来的AFS+Retail);更偏向与零售; 商品主数据与原来的AFS大不相同,取消了原来的Grid的网格概念,取而代之的是变式;商品主数据维护也偏向于Retail的维护模式;事物代码也不是MM01而是MM41 /MM46; 在维护商品主数据前,需要与商品部沟通定义各种商品相关的规范如编码规则,大中小类 ,颜色库,尺码库等,此处不赘述; 创建商品需要确定哪些物料是变式物料,哪些是常规不带特性的单一物料;这决定了在创建商

weixin_45518759的博客 5061

域名与域名解析(完善中)

1、什么是域名?  域名是Internet网络上的一个服务器或一个网络系统的名字,在全世界,没有重复的域名,域名具有唯一性。从技术上讲,域名只是一个Internet中用于解决地址对应问题的一种方法。可以说只是一个技术名词。但是,由于Internet已经成为了全世界人的Internet,域名也自然地成为了一个社会科学名词。    2、什么是域名的层次?  域名分为顶层(TOP-LEVEL)、第二层(

900

【ChatGPT】实用 Prompt 指令大全 —— 一文教你如何更好地挖掘 GPT 的价值

ChatGPT 是由 OpenAI 开发的一种先进的大型语言生成模型,能够理解和生成准确、自然且连贯的文本。文本生成数据分析内容审核语义理解自然语言推理以及其他众多任务ChatGPT是一种基于GPT-3.5架构的大型语言模型,由OpenAI公司开发。该模型在自然语言处理领域有着广泛的应用,可以用于文本生成、文本分类、情感分析、问答系统等任务。本文将从模型的架构、训练方式、优缺点等方面对ChatGPT进行详细介绍。一、模型架构。

AI天才研究院 2万+

华为OD机试 - 服务中心选址(Python)

一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。先输入区域数组positions的长度n(1 ≤ n ≤ 10^5)接下来 n 行每行输入成对的left和right值,以空格隔开。输出为location。

m0_46181452的博客 282

java 获取域名_Java获取域名

private static final char URL_SPLASH = '/';private static final String URL_SCHEME_POSTFIX = "://";private static final String URL_HOST_DELIMITER = ".";private static final String URL_HOST_DELIMITER_RE...

weixin_31635001的博客 822

GPU 资源池化云平台解决方案​

定义与特点Kubernetes是一个开源的容器编排和管理平台,通过提供自动化和声明式的方式来部署、扩展、维护和运行应用程序。它支持跨多个主机和集群部署容器,确保应用程序的高可用性和可扩展性。Kubernetes提供了丰富的功能和插件,允许用户根据自己的需求进行定制和扩展。架构与组件控制平面(Control Plane):负责集群的决策(如调度)和集群状态的检测与响应。

ZhangJiqun&191cm&85kg 1161

判断是否URL的正则表达式【Java和javascript】字符串是否包含中文

/**    * 顶级域名判断;如果要忽略大小写,可以直接在传入参数的时候toLowerCase()再做判断    * @param str    * @return    */   public static boolean isTopURL(String str){       //转换为小写       str = str.toLowerCase();       Strin

田田的菜坛子 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

域名

一.域名简介        域名(DOMAIN NAME)是互联网上企业或机构的名字,是互联网上各网站间相互联系的地址。域名的主要形式是以若干个英文字母,数字,“-”、“.”等符号按一定的方式组成。近年一些国家也在开发使用采用本民族语言构成的域名,如中国的中文域名等。1985年3月15日,第一个英特网域名开始使用。    工商企业的.com,表示网络提供商的.net,表示非盈利组织的.org

ykblog.github.io 3792

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

判断扫描后的内容是否是URL

扫描的明明是Url,居然当文本给处理了,看来正则没有通过。 扫描二维码后,我参考了QQ的效果,分了三种:网页地址,文件下载地址,文本信息;为了实现这种效果,我 发现有很多url很奇葩。所以就想找找别人是怎么用正则来过滤url的。后来我在网上找到了两种实现的正则表达 式,但是都不满足我们的要求。下面贴出网上找的正则: 第一种: p

zhouhui520w的专栏 3504

(转载)一级域名(顶级域名),二级域名,主域名,次域名,父域名,子域名联系与区别及域名带不带www的区别

域名概念: (英语:Domain Name),简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。 顶级域名(也叫一级域名,即倒数第一个点的右边): ***通用顶级域*** 无赞助:.biz .com .edu .gov .info .int .mil .name .net .org .pro...

qq_31433709的博客 1万+

用机器学习识别随机生成的C&C域名

本文用识别由域名生成算法Domain Generation Algorithm: DGA生成的C&C域名作为例子,目的是给白帽安全专家们介绍一下机器学习在安全领域的应用,演示一下机器学习模型的一般流程。机器的力量可以用来辅助白帽专家们更有效率的工作。 本文用到的演示数据集和python演示代码请参见 https://github.com/phunterlau/dga_classifier 关于编

lionzl的专栏 1341

html中url的全写,用HTML链接替换文本中的URL

小编典典让我们看一下需求。您有一些用户提供的纯文本,您希望使用超链接的URL显示这些纯文本。“ http://”协议前缀应该是可选的。域和IP地址都应接受。任何有效的顶级域都应该被接受,例如.aero和.xn–jxalpdlp。端口号应被允许。在普通句子上下文中必须允许使用URL。您可能还希望允许“ https://” URL,也可能允许其他URL。与以往一样,在HTML中显示用户提供的文本时,您...

weixin_29913663的博客 1133

域名得到泛域名

package domain;import java.util.HashSet;public class domain_fandomain { static HashSet<String> fandomain_suffix;//域名后缀 static HashSet<String> fandomain_suffix_area;//国家或地区后缀 //初始化,将这些后缀加入Set中

xuyaoqiaoyaoge的博客 1717

Java获取域名

private static final char URL_SPLASH = '/'; private static final String URL_SCHEME_POSTFIX = "://"; private static final String URL_HOST_DELIMITER = "."; private static final String ...

weixin_30421525的博客 111

Java 判断字符串网址是否合法

public static boolean isTopURL(String str){ //转换为小写 str = str.toLowerCase(); String domainRules = "com.cn|net.cn|org.cn|gov.cn|com.hk|公司|中国|网络|com|net|org|int|edu|gov|mil|arpa|Asia|biz|info|name|pro|coop|aero|museum|ac|ad|ae|af|ag|.

phubing 283

代码智能体实战避坑指南:从认知错位到分层生成

代码智能体不是高级自动补全,而是需重新定义协作关系的开发伙伴。其核心原理在于基于自然语言理解业务意图、构建逻辑图谱并生成可执行代码,技术价值体现在提升交付效率与降低重复劳动,典型应用场景包括ERP定制开发、高并发接口优化和合同审批流重构。实践中必须规避‘全栈幻觉’与领域知识断层,尤其需警惕提示词中缺乏业务动因和现状快照所导致的逻辑偏差。本文聚焦真实工程落地中的5大高频翻车点,覆盖角色认知、提示词结构、分层生成、审阅流程与本地化部署等关键环节。

weixin_30905133的博客 430

Qt窗口:菜单栏、菜单、菜单项、工具栏、状态栏、浮动窗口

菜单栏QMenuBar、菜单QMenu、菜单项QAction、addToolBar添加工具栏、setAllowedAreas或addToolBar的第一个参数设置停靠位置设置、setFloatable浮动性、setMovable移动性,状态栏不可移动(setStatusBar、showMessage临时消息、addWidget/addpermanentWidget),浮动窗口可以放一堆复杂的排版控件,工具栏适合放一些快速点击的快捷按钮

Wangshijie1015的博客 275

工业场景具身智能的 VLA 模式:技术现状、运行机制与工业系统架构分析

VLA正推动工业智能从编程驱动向学习型操作演进,在抓取、上下料等场景展现工程价值,但尚无法独立承担复杂制造的确定性、安全与系统级协同。其核心局限在于隐式表征与工业显式语义的脱节,需依赖分层架构与显式运行机制实现任务可调度、可验证与可追溯。未来工业具身智能将依赖“学习型策略+显式语义+物理闭环”的融合架构,实现从动作生成到系统级运行保障的跃迁。

weixin_41939376的博客 356

Java小白如何设计一个高并发系统?

 设计一个高并发系统并非易事,如果不站在巨人的肩膀上来开展工作的话,这条路是很难保持一路畅通的!所以,本着好东西就是要拿出来分享的原则,LZ就把前段时间从阿里的一位老哥手上捞到的百亿级系统架构设计实录分享给大家,希望能对想接触架构的朋友或者已经是架构师的朋友们得到一点启发!

wdj_yyds的博客 688
上一篇: Apache Doris学习记录
下一篇: SpringBoot整合Smart Doc
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值