本篇内容介绍Ater.Dry.Copilot是什么,它的作用和目的是什么,你是否需要它,以帮助你快速做出决策。
从技术角度来讲,它就是一个dotnet tool
工具,通过nuget
包管理器进行分发。
从功能角度来讲,它提供了:
简单来说,在提供一个解决方案模板的基础上,通过代码生成的方式,帮助用户快速完成业务开发。
简单来说,它的作用是解决在开发过程中的几个痛点:
在解决以上痛点的基础上,还提供自定义代码生成功能,以及提供MCP Server,直接在IDE中使用自然语言方式生成代码。
它的目的,是为了提供一套基础框架和工具,帮助开发者快速开发后台服务和前端应用,主要目标:
最终的效果是:开发者用的舒心,代码写的开心,业务得以快速实现,降低成本和风险。
在此分享一些典型场景的实践效果:
虽然我们尽可能使用主流和通用的技术来解决大部分问题,但仍然有一些特定的场景和需求,可能不适合使用Ater.Dry.Copilot。
如果你是以下情况之一,Ater.Dry.Copilot可能无法满足你的需求:
Code First
的。Guid
作为主键的。DateTimeOffset
作为时间存储类型的。简单解释一下:
Controller
来定义API接口,代码生成也是生成基于Controller
的代码,而MVC
目前无法支持AOT
。Entity Framework Core
作为ORM,并优先使用Code First
的方式来定义数据库模型。Code First
的体现。Guid
(V7)作为主键,因为它在绝大部分场景下都表现良好,我们不应该把时间浪费在争论主键的选择上。DateTimeOffset
作为时间存储类型,因为它是完整的时间类型,是一个兜底的选择,能够避免时区问题。HybridCache
,新的OpenAPI
等特性和功能,.NET10是要求的最低版本。总结来说,使用默认的模板结构及相关技术,可以最大程度利用内置的代码生成功能提高开发效率。
Note
项目模板本身只是一个ASP.NET Core Web Api项目,本质上并不限制使用任何库或使用任何开发或设计模式,为了避免项目变得过于复杂和难以维护,我们会选择一些通用且高效的方案应用到项目开发中,并且内置默认选项的代码生成功能。
Important
你可以通过自定义代码生成的方式来实现基于其他ORM和设计模式的生成功能,从而完全绕开内置的生成功能以及项目结构,但这需要你自己去配置和探索,并且因此带来的技术问题需要自己去解决。请参考高级目录中的在现有项目中使用工具。
通用和灵活是工具的主要特点,它主要体现在:
ASP.NET Core
和Entity Framework Core
的基础上,知识通用,同时帮助你更好地理解和使用这些技术。在面向对象的编程中,我们对现实或抽象事物进行建模,通过编写类和接口来定义事物,以及这些事务之间的关系。无论是业务逻辑还是数据访问,无论是后端服务还是前端应用,都是围绕着这些事务展开的。
所以实体的定义是我们开发的中心和起点,逐渐扩展到代码的各个方面。
而我们的代码生成功能,就是使用Roslyn
来分析和理解这些实体,然后生成其他的代码,如Dto的定义,数据库的查询,接口服务的定义等。
在前后端交互以及服务之间的通信中,OpenAPI
提供了描述这些接口的能力,可以通过它生成各种语言的客户端代码。
这意味着,我最初始在实体中定义的名称,注释及其他特性等信息,应该能够贯穿到整个代码生成的过程中,从而保持一致性,避免重复和错误。
在实际开发中,除了代码之外,我们可能还会:
而这些“代码外”的工作,往往会占用大量的时间和精力。
我们希望能够回归本源,专注于使用代码来实现业务逻辑,尽量减少其他的工作。所以我们推荐:
Code First
的方式来定义数据库模型,而不是手动编写SQL脚本。.NET Aspire
来简化服务的配置和管理,包括使用容器化的方式来运行服务,而不是手动配置和管理服务。我们将后端的编程过程概括为以下几个步骤:
其关系如下:
Dto/Manager/Controller之间的关系:
代码生成功能可一键生成以上内容,完成简单的CURD功能,并提供可用的API。开发者可在此基础上进行修改和扩展。
我们尽量避免讨论设计模式或开发模式等概念或理论。因为我们不是面向设计模式或概念编程,而是面向客户需求且以业务结果为导向。
简单说,能不能快速的满足客户需求,能不能快速的实现业务目标是首要的评估因素。
但不要误解,快速不意味着生产屎山代码,相反,屎山代码会大大降低开发效率和质量。快速意味着在一个良好的架构和规范的基础上,通过工具快速生成规范的代码,然后在此基础上专注于业务逻辑开发,而避免将时间花在争论设计模式或概念上。