全球观点:面向接口编程实践之aspnetcoreapi的抽象
最为一名越过菜鸟之后的开发,需要做接口开发。下面做一个纯粹的接口编程的实例demo,仅仅是一个webapi接口的抽象。
(资料图片)
下面是代码接口,AbsEFWork是webapi,BaseEntityFramework是一个接口库。
先介绍一下webapi的实现,代码是从底层往上层写的,阅读代码的习惯应该是自上向下。
public class ProductController : CustomController{ public ProductController(IEFCoreService efCoreService) : base(efCoreService) { } }
控制器代码很简单的实现了CustomController,数据载体是Product。
using BaseEntityFramework.Implementations;using BaseEntityFramework.Implementations.Entitys;using BaseEntityFramework.IService;using Microsoft.EntityFrameworkCore;namespace BaseEntityFramework{ public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddDbContext(options => options.UseInMemoryDatabase("memorydb")); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddScoped , EFCoreProductService>(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); } }}
Program启动程序需要实现IEFCoreService的注入,以及ProductDbContext 的内存实现。
这样就可以启动一个swagger
对于product数据存储的具体实现,实体类product和dbcontext必须要自己去实现它。
public class Product:IEntity { [Key] public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } [Column(TypeName = "decimal(28,16)")] public decimal Price { get; set; } }
using BaseEntityFramework.Implementations.Entitys;using Microsoft.EntityFrameworkCore;namespace BaseEntityFramework.Implementations{ public class ProductDbContext:DbContext { public ProductDbContext(DbContextOptionsdbContextOptions):base(dbContextOptions) { } public DbSet Products { get; set; } }}
查看上面的控制器代码,有注入IEFCoreService
using BaseEntityFramework.Implementations.Entitys;using BaseEntityFramework.IService;using BaseEntityFramework.Models;using Microsoft.EntityFrameworkCore;using System.Linq.Expressions;namespace BaseEntityFramework.Implementations{ public class EFCoreProductService : IEFCoreService{ private readonly ProductDbContext _dbContext; public EFCoreProductService(ProductDbContext productDbContext) { _dbContext = productDbContext; } public async Task Add(Product entity) { _dbContext.Products.Add(entity); var result = await _dbContext.SaveChangesAsync(); return result != 0; } public Task Delete(Product entity) { throw new NotImplementedException(); } public async Task > GetAll() { var result =await _dbContext.Products.ToListAsync(); return result; } public Task GetEntity(Expression > expression) { throw new NotImplementedException(); } public async Task > GetList(Expression > expression) { var result = await _dbContext.Products.Where(expression).ToListAsync(); return result.AsReadOnly(); } public Task > GetPageResult (PageInput pagInput) where Req : new() { throw new NotImplementedException(); } public Task Update(Product entity) { throw new NotImplementedException(); } }}
上面的代码很简单易懂,最大的好处就是可以复用。实体类和 dbcontext越多这个简简单单的结构就越是有用。
BaseEntityFramework的核心逻辑就是把业务代码做了抽象,做了一个统一的模板,不管 是从那方便说都只有好处。而且作为开发只关心自己的业务代码这一块。
public interface IEFCoreServicewhere T:IEntity { Task Add(T entity) ; Task Delete(T entity); Task Update(T entity); Task > GetList(Expression > expression) ; Task > GetPageResult (PageInput pagInput) where Req:new(); Task GetEntity(Expression > expression); Task > GetAll(); }
以上的实例只是一个简单的demo,项目中需要做框架的话这或许是一个开始,需要做的远远不止这些。
源代码:
liuzhixin405/AbsEFWork (github.com)
标签:
精彩推送
【播资讯】aigc概念是什么意思 GraphicalAbstract是什么意思
今天来聊聊关于aigc概念是什么意思,GraphicalAbstract是什么意思的文章,现在就为大家来简单介绍下aig
2023云南楚雄武定罗婺星球音乐节(时间+地点+门票+阵容)
【楚雄彝族自治州】云南武定罗婺星球音乐节演出时间2023 04 21-04 23演出场馆楚雄彝族自治州|武定县...
新闻快讯
X 关闭
X 关闭
新闻快讯
- 全球观点:面向接口编程实践之aspnetcoreapi的抽象
- 积食小儿推拿有用吗_小儿推拿有用吗|天天热门
- 快资讯丨大宗交易:宏微科技成交532.49万元,成交价85.90元(04-18)
- 天天热资讯!千味央厨2022年年度董事会经营评述
- 斯德哥尔摩情人全文 斯德哥尔摩情人
- 苏丹武装部队称未与快速支援部队达成停火协议
- 胡夏是什么_胡夏谢谢侬
- 全球快消息!黑龙江科技大学在第33届全国高校安全科学与工程学术年会中喜获佳绩
- 广交会伴随制造业共同成长 中国“智造”创新实力引人注目
- 【春日里的中国】山西:黄河湿地育雏忙
- 陆金贷逾期1个月多长时间上征信?
- 环境会计_关于环境会计介绍 环球热讯
- 液冷技术拐点已至 “单相浸没式”迎战大算力时代|通讯
- 马斯克承认收购推特不明智,曾称有机会将卖掉推特|当前焦点
- 天天快消息!福州2人被防护栏困在火场身亡具体详细内容是什么
- 腿粗女生怎么穿“平底鞋”?掌握这几种搭配技巧,时髦又显腿细
- 天天热消息:淄博烧烤带火政信信托?业内:金谷信托产品并未出现秒杀 还有淄博定融产品逾期中
- 社会实践的目的(社会实践的目的是什么)|当前快讯
- 每日讯息!任天成:4.18黄金昨日下跌触及头肩顶颈线构建右肩过程中
- 环球聚焦:Crazy Hair Day|每个孩子都是天生的艺术家
- 时光早报:马东锡《犯罪都市3》首曝预告,《灌篮高手》国内预售破6000万
- 广州门诊看病医保怎么报销?普通门诊待遇标准如何(职工及城乡居民) 世界今头条
- 环球今头条!中国央行今日开展380亿元7天期逆回购操作,因今日有50亿元7天期逆回购到期,当日实现净投放330亿元
- 天天速读:单招语文必考知识点体育(单招语文必考知识点)
- 天天热点!4月17日基金净值:交银持续成长主题混合A最新净值2.0058,涨0.21%
- 怡合达(301029):4月17日北向资金减持20.79万股
- 当前观察:宜兴邮编214200(宜兴邮编)
- 全球快讯:日本陆上自卫队失踪直升机搜寻工作仍在进行 又发现2名机载人员
- 天天热讯:孕妇咳嗽会震到胎儿吗_孕妇感冒咳嗽食疗方法
- 德国环境部长当众怼日本官员:我们不欢迎核污水排海
- 环球热点!北京二手房“带押过户”公布半月,推行存难度,多家银行“尚不能操作”,中介推行积极性不高
- 2023北京半程马拉松圆满举行 男子组冠军成绩59分37秒创赛会纪录
- 4月17日浙江满堂金TDI报价暂稳
- 世界最新:员工称在家养病却飞往海南遭解雇 要求赔偿数十万!
- 【环球财经】东京股市小幅收阳 日经225指数微涨0.07%
- 要闻速递:快快评丨泼水节女生被撕扯雨衣,狂欢也要看语境
- 【天天时快讯】智火柴科技 深圳有限公司_对于智火柴科技 深圳有限公司简单介绍
- 【天天新要闻】如何制作捉鬼敢死队服装
- 天天看点:这事全网刷屏!刚刚通报了!
- 微动态丨智慧换来原油稳产——记中国石油大庆油田采油班长刘丽
- 2021年1月雅思口语高频旧题part2:一次你和一位老朋友接触
- 每日快讯!业内资讯
- 跌破5000不是梦!AMD次旗舰RX7900 XT价格跳水 NV完全不跟降价
- “五一”假期游火爆 首日火车票热门线路部分方向已售罄 今日热门
- 寒战3评价_寒战3评价简述
- 恭喜!香港知名女星突然宣布怀二胎,未婚先孕嫁豪门,住过亿豪宅|世界热议
- 最新:最近痔疮反复发作怎么办
- 江苏展团精彩亮相东京国际自行车展
- 通讯!第一批被AI抢走饭碗的人:游戏、设计等行业的原画师
- Vertu Ti|天天快播报