仓储层当前有接口 IRepository<T> 抽象类 BaseRepository<T> 业务逻辑层有抽象类 BaseBusiness<M, E> 接口 IBusiness<M, E> 请用C# 给出一个案例,支持不同表对应不同的业务逻辑层,然后不同仓储实例。
以下是一个简单的C#示例,展示了如何实现不同表对应不同的业务逻辑层和不同的仓储实例:
// 仓储层
public interface IRepository<T>
{
void Add(T entity);
void Update(T entity);
void Delete(T entity);
T GetById(int id);
// 其他仓储操作方法...
} public abstract class BaseRepository<T> : IRepository<T>
{
// 实现 IRepository 接口的通用方法
} // 业务逻辑层
public interface IBusiness<M, E>
{
void Process(M model);
// 其他业务逻辑方法...
} public abstract class BaseBusiness<M, E> : IBusiness<M, E>
{
// 实现 IBusiness 接口的通用方法
} // 具体业务逻辑类
public class ProductBusiness : BaseBusiness<ProductModel, ProductEntity>
{
private readonly IRepository<ProductEntity> _productRepository; public ProductBusiness(IRepository<ProductEntity> productRepository)
{
_productRepository = productRepository;
} public override void Process(ProductModel model)
{
// 实现特定的业务逻辑
// 可以使用 _productRepository 执行数据操作
}
} public class CustomerBusiness : BaseBusiness<CustomerModel, CustomerEntity>
{
private readonly IRepository<CustomerEntity> _customerRepository; public CustomerBusiness(IRepository<CustomerEntity> customerRepository)
{
_customerRepository = customerRepository;
} public override void Process(CustomerModel model)
{
// 实现特定的业务逻辑
// 可以使用 _customerRepository 执行数据操作
}
} // 模型和实体类
public class ProductModel
{
// 产品模型的属性...
} public class ProductEntity
{
// 产品实体的属性...
} public class CustomerModel
{
// 客户模型的属性...
} public class CustomerEntity
{
// 客户实体的属性...
} // 使用示例
class Program
{
static void Main(string[] args)
{
// 注入不同的仓储实例到不同的业务逻辑类中
IRepository<ProductEntity> productRepository = new ProductRepository();
IBusiness<ProductModel, ProductEntity> productBusiness = new ProductBusiness(productRepository); IRepository<CustomerEntity> customerRepository = new CustomerRepository();
IBusiness<CustomerModel, CustomerEntity> customerBusiness = new CustomerBusiness(customerRepository); // 使用业务逻辑类进行操作
var productModel = new ProductModel();
productBusiness.Process(productModel); var customerModel = new CustomerModel();
customerBusiness.Process(customerModel);
}
}
仓储层当前有接口 IRepository<T> 抽象类 BaseRepository<T> 业务逻辑层有抽象类 BaseBusiness<M, E> 接口 IBusiness<M, E> 请用C# 给出一个案例,支持不同表对应不同的业务逻辑层,然后不同仓储实例。的更多相关文章
- 点击文字弹出一个DIV层窗口代码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- 2019-8-31-C#-如何写出一个不能被其他程序集继承的抽象类
title author date CreateTime categories C# 如何写出一个不能被其他程序集继承的抽象类 lindexi 2019-08-31 16:55:58 +0800 20 ...
- C# 如何写出一个不能被其他程序集继承的抽象类
我需要限定某个抽象类只能在我程序集类实现,而不支持其他程序集实现,也就是我需要一个不能被继承的抽象类 在 C# 里面有抽象类和接口,这两个都是期望被继承才能被使用,而抽象类是可以做到只能在自己程序集和 ...
- SQL学习笔记四(补充-1-1)之MySQL单表查询补充部分:SQL逻辑查询语句执行顺序
阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SELECT语句关键字的定义顺序 SELE ...
- 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- JavaWeb项目开发案例精粹-第3章在线考试系统-005action层
1. <?xml version="1.0" encoding="UTF-8" ?><!-- XML声明 --> <!DOCTYP ...
- 点击按钮弹出一个div层
JQuery弹出层,点击按钮后弹出遮罩层,还有关闭按钮 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml& ...
- cocos2d-x JS 弹出对话框触摸监听(吞噬点击事件遮挡层)
在游戏中,我们经常会碰到一些弹窗,这些弹窗禁止点透,也就是禁止触摸事件传递到底层,我们称之为遮挡层,这些遮挡层,需要开发遮挡层,我们首先得了解cocos2d-js的触摸传递机制. 根据官方文档,我们可 ...
- 案例48-crm练习利用spring管理service和dao层的对象
1 导包 2 将 Service 对象以及 Dao 对象配置到 spring 容器 <?xml version="1.0" encoding="UTF-8" ...
- JavaWeb项目开发案例精粹-第3章在线考试系统-007View层
0.login.jsp <%@ page language="java" import="java.util.*" pageEncoding=" ...
随机推荐
- 一文学会powshell使用及功能
声明! 原文来自微信公众号泷羽Sec-track 认识powsehll PowerShell(通常称作PowerShell或Windows PowerShell)是由微软开发的一种任务自动化和配置管理 ...
- 一打开终端就默认进入conda的base环境,取消方法
conda版本:4.10.3 安装conda之后,在使用VSCode的时候,每次在里面使用powershell终端都是默认进入base环境,稍不注意就会用错python解释器,所以考虑取消这一设置.经 ...
- 如何在 Ubuntu 20.04 上安装 MySQL
https://dev.mysql.com/downloads/mysql/ 简介: MySQL是最流行的开源关系数据库管理系统.它速度快,容易使用,容易扩展,并且流行的LAMP和LEMP的一部分. ...
- 智谱开源CogAgent的最新模型CogAgent-9B-20241220,全面领先所有开闭源GUI Agent模型
在现代数字世界中,图形用户界面(GUI)是人机交互的核心.然而,尽管大型语言模型(LLM)如ChatGPT在处理文本任务上表现出色,但在理解和操作GUI方面仍面临挑战,因此最近一年来,在学界和大模型社 ...
- Qt/C++地图轨迹回放/自定义图标/动态平滑移动/导入轨迹数据/支持各种地图包括天地图
一.前言说明 这个轨迹回放的功能迭代过很多个版本,最初的版本是轨迹点的坐标每次都是删除折线再重新生成折线,后面发现有内存泄漏,地图js中并不会及时的释放没有用的对象,哪怕是用地图提供的clearove ...
- OpenCV4.1.0编译时提示“CV_BGR2GRAY”: 未声明的标识符
OpenCV版本为4.1.0 使用CV_BGR2GRAY时报错: "CV_BGR2GRAY": 未声明的标识符 解决方法一:添加头文件:#include <opencv2/i ...
- Windows bat批处理文件结束某个程序进程,删除文件夹
Windows bat批处理文件结束某个程序进程,删除文件夹 bat文件内容: @echo off setlocal :: 要结束的应用程序进程名 set "PROCESS_NAME=助手. ...
- 微服务实战系列(五)-注册中心Eureka与nacos区别-copy
1. 场景描述 nacos最近用的比较多,介绍下nacos及部署吧,刚看了下以前写过类似的,不过没写如何部署及与eureka区别,只展示了效果,补补吧. 2.解决方案 2.1 nacos与eureka ...
- Mac安装MySQL详细教程
1.MySQL安装包下载 还没下载的话请前往官网下载 我们可以看到这里有两个不同架构的dmg的安装包,如果不知道自己电脑是ARM还是X86的话可以打开终端输入:uname -a 或者 uname -a ...
- 深入理解第二范式(2NF):提升数据库设计的有效性与灵活性
title: 深入理解第二范式(2NF):提升数据库设计的有效性与灵活性 date: 2025/1/16 updated: 2025/1/16 author: cmdragon excerpt: 数据 ...