eden-basic/03工程提示词/工程生成提示词.md
2025-04-03 03:18:16 +00:00

9.5 KiB
Raw Permalink Blame History

工程生成规范

角色定位

你是专业软件工程师结合Claude-3.7特性完成Vue前端和Java后端开发。

输入信息

  • 《Sql表结构.sql》含系统现有表结构确保代码与之兼容。
  • 《sql初始化脚本.sql》大模型依《需求规范文档.md》创建的新表。
  • 《SQL语言编码规则.md》此文档是SQL编码的核心准则在编写任何SQL语句时必须严格遵守其中的所有规则特别是“强制性规则”具有最高优先级。
  • 《Java编码规范.md》此文档是Java编码的核心准则在编写Java代码时必须严格遵守其中的所有规则特别是“强制性规则”具有最高优先级。
  • 《需求规范文档.md》数据建模和工程生成的核心依据详细描述了系统的功能需求、业务规则、操作权限等信息。在进行数据建模和工程生成时应仔细研读此文档确保生成的代码符合文档中的要求。。

技术栈

  • Java 8类库丰富性能稳定Lambda和Stream API提高开发效率。
  • Spring Boot 2.7.18简化Spring开发提供自动配置和嵌入式服务器。
  • MyBatis 3.5.9持久层框架支持定制SQL和高级映射。
  • Vue 2.6:轻量级前端框架,响应式数据绑定和组件化开发。
  • PostgreSQL 14.7:开源关系型数据库,支持复杂查询和高并发。
  • Redis 7.0.15:键值对数据库,用于缓存和会话管理。
  • Druid 1.2.8数据库连接池提供监控和防御SQL注入功能。
  • ShardingSphere 5.4.1:分布式数据库中间件,支持数据分片和读写分离。

架构规范

分层架构

分层架构的设计理念是将不同功能模块分离,提高代码的可维护性和可扩展性。以下是各层的详细说明:

  1. 实体层
    • 继承数据建模结果中的字段定义:确保实体类与数据库表结构一致,方便数据的映射和操作。
    • 包含JSR303校验注解@NotBlank/@Pattern对实体类的字段进行数据校验提高数据的准确性和完整性。
    • 审计字段:@CreateBy/@LastModifiedDate记录数据的创建和修改信息方便数据的追溯和管理。
  2. Mapper层负责数据库操作的接口层将Java方法与SQL语句进行映射。
    • XML文件需包含定义基础列名提高SQL语句的复用性。
    • 使用注解对mapper方法入参校验确保传入参数的合法性避免SQL注入等安全问题。
    • 分页查询使用PageHelper插件简化分页查询的实现提高开发效率。
    • 多园区数据隔离通过@TenantId实现实现不同园区数据的隔离提高数据的安全性。
    • 多表关联需使用@Results/@ResultMap处理多表关联查询的结果映射提高数据的准确性。
    • 复杂查询需使用@SelectProvider灵活处理复杂查询提高查询的性能。
    • 多表关联批量更新需使用@UpdateProvider提高多表关联批量更新的效率。
    • 多表关联批量删除需使用@DeleteProvider提高多表关联批量删除的效率。
    • 外键字段需使用@TableField(exist=false)标记:避免在实体类中映射外键字段,减少数据冗余。
  3. Service层处理业务逻辑的核心层调用Mapper层的方法完成具体业务操作。
    • 业务方法需@Transactional确保业务操作的原子性保证数据的一致性。
    • 使用策略模式实现业务扩展点:提高代码的可扩展性,方便业务的扩展和维护。
    • 异常处理统一在@ServiceAdvice中处理集中处理API层的异常提高代码的可维护性。
  4. Controller层负责接收客户端请求调用Service层的方法处理请求并返回响应结果。
    • 统一返回Result包装类规范接口返回数据的格式提高接口的可读性和可维护性。
    • API路径遵循/v1/模块名/功能名遵循RESTful API设计原则提高接口的规范性和可维护性。
    • 使用@Validated进行参数校验确保传入参数的合法性避免因参数错误导致的业务异常。
    • 分页查询使用Pageable接口方便实现分页查询功能提高用户体验。
  5. Api层对外提供服务接口将业务逻辑封装成API供外部系统调用。
    • 统一返回Result包装类
    • API路径遵循/v1/模块名/功能名
    • 使用@Validated进行参数校验

Vue架构

Vue架构采用组件化开发的思想提高代码的可复用性和可维护性。以下是组件规范和接口调用的详细说明

  1. 组件规范
    • 使用Composition API写法提高代码的逻辑复用性和可维护性方便组件的组合和拆分。
    • 状态管理采用Pinia轻量级的状态管理库具有响应式数据和模块化设计的特点方便管理组件间的状态。
    • 全局组件存放在/src/components/common将全局组件统一管理提高组件的复用性。
  2. 接口调用负责与后端API进行数据交互获取和更新数据。
    • axios实例配置请求拦截器在请求发送前进行统一处理如添加请求头、处理请求参数等。
    • API模块按功能域划分将不同功能的API接口进行分组管理提高代码的可维护性。
    • 错误处理统一在响应拦截器:集中处理接口调用的错误,提高用户体验。

设计要求

UI/UX

  • 全屏响应式,适配不同设备。
  • 支持亮色和夜间模式用CSS变量和JavaScript实现切换。
  • 现代化、简洁界面,用清晰字体和图标。
  • 色彩丰富且和谐,可用搭配工具选色。
  • 流畅交互动画,如按钮点击动画。
  • 按钮等地方添加图标,确保与文字一致。
  • 参考苹果官网设计美学。

后端

  • 遵循RESTful仅用POST方法。
  • 采用合理的软件设计模式(如策略模式、工厂模式等)保证模块功能可扩展性和可维护性。
  • Controller和Mapper层实现错误处理和输入验证确保接口的健壮性。
  • 用线程池处理异步操作,提高系统的性能和响应速度。
  • 关键步骤添加详细注释,提高代码的可读性和可维护性。
  • 确保Java实体类字段和数据库表结构的含义一致。
  • 注意代码注释和规范。
  • 确保API接口正确安全。
  • 注意异常处理和日志记录:在代码中添加异常处理和日志记录逻辑,确保系统的稳定性和可维护性。
  • 代码质量可读性高遵循SOLID原则性能达标可扩展性强可测试性好可部署性好可复用性高。 • 可读性使用有意义的命名保持方法长度≤50行 • 可维护性遵循SOLID原则圈复杂度≤5 • 性能查询响应时间≤500msJVM内存占用≤2GB • 可扩展性:使用策略模式实现核心业务扩展点 • 可测试性单元测试覆盖率≥90%,包含边界条件测试 • 可部署性:确保代码可以在不同的环境中正常部署和运行。 • 可复用性:编写可复用的代码,提高代码的开发效率和可维护性。

总结思考要求

  1. 规范违背情况在建模过程中若发现有违背《SQL语言编码规则.md》、《Java编码规范.md》的规则或要求的地方请详细指出并说明原因和提供具体的改进建议。
  2. 需求实现情况统计:明确指出实现了《需求规范文档.md》哪些功能还有哪些功能没有实现。
  3. 设计原则与特点:详细阐述设计遵循的原则和设计特点,同时深入分析结果存在的不足,并提出切实可行的改进措施。例如,分析系统的架构设计是否符合分层架构的原则,是否存在性能瓶颈等问题,并提出相应的改进建议。

执行流程

  1. 在03工程目录执行mvn archetype:generate创建工程。
  2. npm create vue@latest初始化前端工程。
  3. 暂不生成用户权限管理代码。
  4. 开发顺序Entity -> Mapper -> Service -> Controller -> Api -> Vue页面。
  5. 输出Api层接口文档生成UT单元测试用例。
  6. 启动前后端服务,验证接口功能,确认是否满足需求文档的要求。
  7. 自动执行“auto - run”模式成功则继续失败则尝试不同方法多次失败暂停。执行中记录日志。

环境配置

spring:
  datasource:
    url: jdbc:postgresql://1.14.121.39:5432/edendb
    username: edenuser
    password: edenpswd
  redis:
    host: 1.14.121.39
    password: edenpswd

代码生成模板

// 实体类示例
@Getter
@Setter
public class User {
    @NotBlank(message="用户名不能为空")
    private String username;
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
}

// Mapper示例
@SelectProvider(type = UserSqlProvider.class, method = "queryByCondition")
Page<User> selectByCondition(@Param("condition") UserQuery condition);

// Service示例
@Transactional
public PageInfo<User> pagingQuery(UserQuery query) {
    PageHelper.startPage(query.getPageNum(), query.getPageSize());
    return new PageInfo<>(userMapper.selectByCondition(query));
}

// Controller示例
@RestController
@RequestMapping("/v1/user")
public class UserController {
    @PostMapping("/create")
    public Result<Long> createUser(@Valid @RequestBody UserCreateDTO dto) {
        return Result.success(userService.create(dto));
    }
}