🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
系列文章
- 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客?
- 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目
- 基于.NetCore开发博客项目 StarBlog - (3) 模型设计
- 基于.NetCore开发博客项目 StarBlog - (4) markdown博客批量导入
- 基于.NetCore开发博客项目 StarBlog - (5) 开始搭建Web项目
- 基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表
- …
前言
前一篇文章把Web项目搭起来了,现在开始来写页面~
本文记录博客文章列表的开发,包括参数、分类过滤、分页、搜索、排序等内容。
ORM
本项目的ORM使用FreeSQL,前面「博客批量导入」的文章中有初步涉及到了,不过没有介绍太多,这里再讲一下几个关键的地方。
不同于网上比较常见的EF Core,FreeSQL设计完模型之后不需要进行迁移操作,在开发模式下开启自动结构同步(AutoSyncStructure
)就能自动创建、修改数据表。
还有比较方便的一点是FreeSQL自带了简单的仓储模式,不用再自己封装一套,可以减少开发时的代码量~
不过局限性也是有的,不封装仓储层的话,意味着service层代码跟ORM绑定,以后如果切换ORM会带来额外的重构成本。
打开StarBlog.Data
项目,我们来写一个扩展方法,新增Extensions
目录,在里面新增ConfigureFreeSql.cs
using FreeSql;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace StarBlog.Data.Extensions;
public static class ConfigureFreeSql {
public static void AddFreeSql(this IServiceCollection services, IConfiguration configuration) {
var freeSql = new FreeSqlBuilder()
.UseConnectionString(DataType.Sqlite, configuration.GetConnectionString("SQLite"))
.UseAutoSyncStructure(true)
.Build();
services.AddSingleton(freeSql);
// 仓储模式支持
services.AddFreeRepository();
}
}
然后编辑StarBlog.Web
项目下的Program.cs
,注册一下FreeSQL的服务,用我们刚才写的扩展方法。
using StarBlog.Data.Extensions;
builder.Services.AddFreeSql(builder.Configuration);
在要用的地方注入就行了,比如
IBaseRepository \_postRepo;
// 获取全部文章
\_postRepo.Select.ToList()
就很方便了,开箱即用~
Service
因为我们的后端既要渲染页面,又要做RESTFul接口,所以要把业务逻辑抽象出来放在service层,避免在Controller里重复。
在StarBlog.Web
项目的Services
目录里新增PostService.cs
,我们要在这封装跟文章有关的逻辑~
首先依赖注入,把需要用到的服务注入进来
public class PostService {
private readonly IBaseRepository \_postRepo;
private readonly IBaseRepository \_categoryRepo;
public PostService(IBaseRepository postRepo,
IBaseRepository categoryRepo) {
\_postRepo = postRepo;
\_categoryRepo = categoryRepo;
}
}
写一个获取全部文章的方法
public List GetAll() {
return \_postRepo.Select.ToList();
}