ASP.NET Boilerplate 入门教程:基于ASP.NET Core与EF Core构建多层Web应用(第一部分)...

ASP.NET Boilerplate 入门教程:基于ASP.NET Core与EF Core构建多层Web应用(第一部分)

aspnetboilerplate aspnetboilerplate: 是一个开源的 ASP.NET Core 应用程序框架,提供了各种开箱即用的功能和模块,方便开发者构建可扩展和可维护的 Web 应用程序。适合开发者使用 ASP.NET Core 构建企业级 Web 应用程序。 aspnetboilerplate 项目地址: https://gitcode.com/gh_mirrors/as/aspnetboilerplate

引言

本文将介绍如何使用ASP.NET Boilerplate框架结合ASP.NET Core和Entity Framework Core构建一个多层Web应用程序。这是系列教程的第一部分,我们将创建一个简单的任务管理系统作为示例项目。

技术栈概览

我们将使用以下技术栈:

  • .NET Core:跨平台应用开发框架
  • ASP.NET Boilerplate:应用框架和启动模板
  • ASP.NET Core:Web框架
  • Entity Framework Core:ORM框架
  • Bootstrap:前端HTML/CSS框架
  • jQuery:客户端AJAX/DOM库
  • xUnitShouldly:用于单元测试和集成测试

架构设计原则

项目将采用以下架构设计原则:

  1. 分层架构:清晰分离表现层、应用层、领域层和基础设施层
  2. 领域驱动设计(DDD):以业务领域为核心组织代码结构
  3. 依赖注入(DI):实现松耦合的组件设计
  4. 集成测试:确保各层组件协同工作正常

环境准备

开发工具要求

在开始之前,请确保已安装:

  • Visual Studio 2017或更高版本
  • SQL Server(可使用LocalDB替代)
  • 推荐Visual Studio扩展:
    • Bundler & Minifier
    • Web Compiler

创建应用程序

我们使用ASP.NET Boilerplate的启动模板创建一个名为"Acme.SimpleTaskApp"的Web应用程序。选择"多页面Web应用"模板,并暂时禁用身份验证功能以获得最基础的启动模板。

解决方案结构

模板创建的项目包含6个核心项目:

  1. Core:领域/业务层(实体、领域服务等)
  2. Application:应用层(DTO、应用服务等)
  3. EntityFramework:EF Core集成层
  4. Web:ASP.NET MVC表现层
  5. Tests:单元和集成测试(不包括Web层)
  6. Web.Tests:ASP.NET Core集成测试(包含Web层)

开发任务管理功能

创建任务实体

我们从创建简单的Task实体开始,该实体属于领域层,因此放在.Core项目中:

[Table("AppTasks")]
public class Task : Entity, IHasCreationTime
{
    public const int MaxTitleLength = 256;
    public const int MaxDescriptionLength = 64 * 1024; //64KB

    [Required]
    [StringLength(MaxTitleLength)]
    public string Title { get; set; }

    [StringLength(MaxDescriptionLength)]
    public string Description { get; set; }

    public DateTime CreationTime { get; set; }

    public TaskState State { get; set; }

    public Task()
    {
        CreationTime = Clock.Now;
        State = TaskState.Open;
    }
}

public enum TaskState : byte
{
    Open = 0,
    Completed = 1
}

关键点说明:

  1. 继承自ABP的Entity基类,默认包含int类型的Id属性
  2. 实现IHasCreationTime接口,标准化创建时间字段
  3. 使用Clock.Now而非DateTime.Now,便于未来切换时区
  4. 通过Table特性指定数据库表名

配置DbContext

在EntityFramework项目中,我们需要将Task实体添加到DbContext:

public class SimpleTaskAppDbContext : AbpDbContext
{
    public DbSet<Task> Tasks { get; set; }

    public SimpleTaskAppDbContext(DbContextOptions<SimpleTaskAppDbContext> options) 
        : base(options)
    {
    }
}

数据库迁移

  1. 使用Add-Migration命令创建初始迁移
  2. 使用Update-Database命令应用迁移并创建数据库

迁移完成后,数据库中将创建AppTasks表,我们可以手动添加一些测试数据。

实现应用服务层

定义应用服务接口

public interface ITaskAppService : IApplicationService
{
    Task<ListResultDto<TaskListDto>> GetAll(GetAllTasksInput input);
}

定义DTO

public class GetAllTasksInput
{
    public TaskState? State { get; set; }
}

[AutoMapFrom(typeof(Task))]
public class TaskListDto : EntityDto, IHasCreationTime
{
    public string Title { get; set; }
    public string Description { get; set; }
    public DateTime CreationTime { get; set; }
    public TaskState State { get; set; }
}

实现应用服务

public class TaskAppService : SimpleTaskAppAppServiceBase, ITaskAppService
{
    private readonly IRepository<Task> _taskRepository;

    public TaskAppService(IRepository<Task> taskRepository)
    {
        _taskRepository = taskRepository;
    }

    public async Task<ListResultDto<TaskListDto>> GetAll(GetAllTasksInput input)
    {
        var tasks = await _taskRepository
            .GetAll()
            .WhereIf(input.State.HasValue, t => t.State == input.State.Value)
            .OrderByDescending(t => t.CreationTime)
            .ToListAsync();

        return new ListResultDto<TaskListDto>(
            ObjectMapper.Map<List<TaskListDto>>(tasks)
        );
    }
}

关键点说明:

  1. 继承自SimpleTaskAppAppServiceBase(最终继承自ABP的ApplicationService)
  2. 通过依赖注入获取Task仓储
  3. 使用WhereIf扩展方法实现条件查询
  4. 使用AutoMapper自动映射实体到DTO

总结

本文介绍了如何使用ASP.NET Boilerplate框架创建基于ASP.NET Core和EF Core的多层Web应用程序。我们完成了:

  1. 项目创建和基本配置
  2. 领域实体定义
  3. 数据库集成
  4. 应用服务层实现

在下一部分中,我们将继续开发Web界面,实现任务列表展示功能,并添加本地化支持。

aspnetboilerplate aspnetboilerplate: 是一个开源的 ASP.NET Core 应用程序框架,提供了各种开箱即用的功能和模块,方便开发者构建可扩展和可维护的 Web 应用程序。适合开发者使用 ASP.NET Core 构建企业级 Web 应用程序。 aspnetboilerplate 项目地址: https://gitcode.com/gh_mirrors/as/aspnetboilerplate

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

资源下载链接为: https://pan.quark.cn/s/3d8e22c21839 随着 Web UI 框架(如 EasyUI、JqueryUI、Ext、DWZ 等)的不断发展成熟,系统界面的统一化设计逐渐成为可能,同时代码生成器也能够生成符合统一规范的界面。在这种背景下,“代码生成 + 手工合并”的半智能开发模式正逐渐成为新的开发趋势。通过代码生成器,单表数据模型以及一对多数据模型的增删改查功能可以被直接生成并投入使用,这能够有效节省大约 80% 的开发工作量,从而显著提升开发效率。 JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发平台。它引领了一种全新的开发模式,即从在线编码(Online Coding)到代码生成器生成代码,再到手工合并(Merge)的智能开发流程。该平台能够帮助开发者解决 Java 项目中大约 90% 的重复性工作,让开发者可以将更多的精力集中在业务逻辑的实现上。它不仅能够快速提高开发效率,帮助公司节省大量的人力成本,同时也保持了开发的灵活性。 JEECG 的核心宗旨是:对于简单的功能,可以通过在线编码配置来实现;对于复杂的功能,则利用代码生成器生成代码后,再进行手工合并;对于复杂的流程业务,采用表单自定义的方式进行处理,而业务流程则通过工作流来实现,并且可以扩展出任务接口,供开发者编写具体的业务逻辑。通过这种方式,JEECG 实现了流程任务节点和任务接口的灵活配置,既保证了开发的高效性,又兼顾了项目的灵活性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

井隆榕Star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值