BootstrapBlazor(Server)完整标准目录结构

BootstrapBlazor(Server)完整标准目录结构

芯宇宙技术社
2026-07-28 / 0 评论 / 7 阅读 / 正在检测是否收录...

结合 Identity 登录注册、后台业务、分层解耦、单人易维护设计,区分页面层、业务服务层、数据仓储、模型、公共工具、认证,适配你「注册 / 登录 / 权限 / 后台存数据带操作人」全套需求。

 YourProject/
├── Program.cs                     # 全局DI、认证、BB服务注册入口
├── App.razor                      # 路由+全局授权拦截
├── appsettings.json              数据库连接串、配置
├── wwwroot/                       静态资源(css/js/图片)
│
├── Data/                          数据库&Identity核心
│   ├── AppDbContext.cs            EF上下文(Identity+业务表)
│   ├── Migrations/                EF迁移文件
│
├── Entities/                      全部数据库实体
│   ├── Identity/                  扩展用户实体
│   │   └── AppUser.cs
│   └── Business/                  业务表(商品/订单等)
│       └── Product.cs
│
├── Models/                        DTO、表单Model、视图模型
│   ├── Account/                   登录/注册表单模型
│   │   ├── LoginModel.cs
│   │   └── RegisterModel.cs
│   └── Dtos/                      接口传输DTO
│
├── Repositories/                  数据仓储层(解耦EF)
│   ├── IProductRepo.cs
│   └── ProductRepo.cs
│
├── Services/                      业务逻辑层(核心业务)
│   ├── AccountService.cs          登录注册封装(可选,简化页面代码)
│   └── ProductService.cs          商品增删改查业务
│
├── Shared/                        全局共享组件、布局、工具
│   ├── MainLayout.razor           主布局(导航、退出按钮)
│   ├── RedirectToLogin.razor      未登录跳转组件
│   ├── AuthHelper.cs              获取当前登录用户工具类
│   └── Components/                通用弹窗、表格组件
│
├── Pages/                         所有页面(路由页面)
│   ├── Account/                   账号相关页面
│   │   ├── Login.razor
│   │   └── Register.razor
│   └── Admin/                     后台管理页面(需授权)
│       └── Product.razor          商品管理(保存带创建人)
└── obj / bin                      编译缓存(忽略)

分层职责说明(单人开发清晰不混乱)

  1. Data 数据层(只管数据库)
    AppDbContext:包含 Identity 用户表 + 业务实体 DbSet
    Migrations:EF 自动生成迁移,不要手动修改
    职责:只定义表关系,不写业务逻辑
  2. Entities 实体层(数据库映射类)
    Entities/Identity/AppUser
    继承 IdentityUser,扩展昵称、手机号等自定义字段
    Entities/Business/Product
    业务表,包含 CreateUserName 创建人、创建时间等审计字段
    规范:只包含属性,无复杂业务方法(轻量实体,单人不用重型 DDD)
  3. Models 视图传输层(页面表单、返回对象)
    Account 文件夹:登录、注册页面绑定的表单类(LoginModel/RegisterModel)
    Dtos:列表查询返回、新增编辑专用传输对象,隔离数据库实体,避免泄露敏感字段
  4. Repositories 仓储层(隔离 EF Core)
    接口 + 实现分离,页面 / 服务不直接操作 DbContext
    示例:
    IProductRepo 定义查询、新增、修改接口
    ProductRepo 实现 DbContext 操作
    好处:后续换数据库、加缓存只改仓储,页面完全不动
  5. Services 业务层(所有业务规则放这里,页面轻量化)
    AccountService(可选推荐)
    封装注册、登录、退出、校验逻辑,页面只调用方法,不写大量 Identity 代码
    ProductService
    商品新增、编辑、删除、列表查询,自动注入仓储,自动携带当前操作人用户名
    页面只调用 _productService.SaveAsync(model, userName),不用重复写赋值逻辑
  6. Shared 共享公共资源
    MainLayout:全局侧边栏、顶部导航、登录 / 退出按钮
    RedirectToLogin:授权拦截跳转组件
    AuthHelper:静态工具,封装获取登录用户名、UserId、是否登录
    Shared/Components:全局复用弹窗、表格、搜索组件
  7. Pages 页面层(纯 UI,只做交互,不写复杂逻辑)
    Pages/Account 公开页面(无需 [Authorize])
    Login.razor/ Register.razor:登录注册表单,调用 AccountService
    Pages/Admin 后台私有页面(加 @attribute [Authorize])
    所有管理页面,仅调用 Service 获取数据,界面使用 BootstrapBlazor 组件(Table/Dialog/FormInput)
    页面原则:不写 EF、不写业务判断,只接收数据、弹窗、按钮事件
    适配你需求的分层优势(注册 + 登录 + 权限 + 保存带用户名)
    登录身份统一在 Shared/AuthHelper 获取,所有后台页面复用,无重复代码
    新增数据自动赋值用户名逻辑封装在 Service,每个后台页面不用重复写
    Identity 登录注册逻辑封装 AccountService,Login/Register 页面极简
    Admin 文件夹全部页面统一授权,结构清晰,一眼区分前台 / 后台
    仓储隔离数据库,后期加日志、数据过滤只需改 Repo,页面不动
    极简单人优化建议(不用过度分层)
    如果你是个人小型项目,不想拆 Repo+Service 两层,可以简化:
    简化目录(小型项目专用)
    删除 Repositories,Service 直接注入 DbContext,减少文件数量
   YourProject/
├── Data/
├── Entities/
├── Models/
├── Services/  // Service直接操作DbContext,跳过仓储
├── Shared/
└── Pages/

适合:后台管理、个人工具、小型业务,开发更快,维护成本低
路由规范约定
账号页:/account/login / /account/register
后台管理统一前缀 /admin/xxx,全部加授权标签
所有页面统一放在 Pages 下,不零散丢根目录

关键文件存放位置对应功能
表格
功能 对应目录文件
用户注册 / 登录页面 Pages/Account
获取当前登录账号 Shared/AuthHelper.cs
用户数据库实体 Entities/Identity/AppUser.cs
数据库上下文 Data/AppDbContext.cs
商品等业务实体 Entities/Business
后台商品管理页面 Pages/Admin
商品增删业务逻辑 Services/ProductService
全局布局、退出按钮 Shared/MainLayout
未登录自动跳转 Shared/RedirectToLogin

0

评论 (0)

取消