一个简单指令让 Cursor 生成高质量代码

在编程领域,我们经常使用 Cursor 等工具快速生成代码。但如何确保生成的代码既简单可靠又便于维护呢?本文将为你详细介绍,通过运用 “第一性原理”“DRY 原则”“KISS 原则”“SOLID 原则”“YAGNI 原则” 等开发原则,构建一个简洁高效的指令体系,让 AI 工具生成高质量的代码。

一、指令内容与核心原则

    
    
    
  你是一个优秀的技术架构师和优秀的程序员,在进行架构分析、功能模块分析,以及进行编码的时候,请遵循如下规则:
1. 分析问题和技术架构、代码模块组合等的时候请遵循 “第一性原理”
2. 在编码的时候,请遵循 “DRY 原则”、“KISS 原则”、“SOLID 原则”、“YAGNI 原则”
3. 如果单独的类、函数或代码文件超过 500 行,请进行识别分解和分离,在识别、分解、分离的过程中请遵循以上原则

下面详细解析各原则的内涵:

(一)第一性原理

  • 核心定义 :从最基本的、不可再简化的真理或物理定律出发,通过逻辑演绎推导解决方案。如在计算机科学中,分布式领域的 CAP 定理是架构设计的基础,Rust 语言依据内存物理特性设计所有权模型。
  • 关键特征 :以演绎法为主,具有跨学科性和反经验主义的特点。
  • 局限性 :计算成本高、抽象难度大且存在过度简化风险。

(二)DRY 原则

  • 核心定义 :强调系统的每个功能或逻辑应有且仅有一个明确的实现,避免代码冗余。
  • 核心价值 :提升可维护性、可读性和一致性。
  • 需警惕的陷阱 :过度抽象、忽略上下文以及一次性代码问题。

(三)KISS 原则

  • 核心定义 :主张设计应尽可能简单明了,避免不必要的复杂性。
  • 核心价值 :降低复杂度、提升效率和优化体验。
  • 常见误区 :简单不等于简陋,需避免过早优化和忽视上下文。

(四)SOLID 原则

  • 单一职责原则(SRP) :一个类应只有一个引起变化的原因,专注一项功能。
  • 开闭原则(OCP) :软件实体应对扩展开放,对修改关闭。
  • 里氏替换原则(LSP) :子类必须能替换父类且不破坏程序正确性。
  • 接口隔离原则(ISP) :客户端不应依赖不需要的接口,设计小而专的接口。
  • 依赖倒置原则(DIP) :高层模块与低层模块应依赖抽象。

(五)YAGNI 原则

  • 核心思想 :只实现当前明确需要的功能,避免过度设计和过早优化。
  • 核心价值 :简化代码、提高效率和增强灵活性。
  • 潜在陷阱 :可能忽视架构和非功能性需求。

二、代码实践示例

以下是一个基于 Go 语言的用户系统代码示例,展示了如何遵循上述原则:

    
    
    
  package main
import (
    "fmt"
)
// 用户接口,遵循单一职责原则和开闭原则
type User interface {
    GetID() int
    GetName() string
    GetEmail() string
}
// 具体用户结构体
type ConcreteUser struct {
    id    int
    name  string
    email string
}
func (u *ConcreteUser) GetID() int {
    return u.id
}
func (u *ConcreteUser) GetName() string {
    return u.name
}
func (u *ConcreteUser) GetEmail() string {
    return u.email
}
// 用户管理接口,遵循接口隔离原则
type UserManager interface {
    AddUser(user User)
    GetUserByID(id int) User
    GetAllUsers() []User
}
// 具体的用户管理结构体
type ConcreteUserManager struct {
    users map[int]User
}
// 创建用户管理实例的工厂函数,遵循 DRY 原则
func NewConcreteUserManager() *ConcreteUserManager {
    return &ConcreteUserManager{
        users: make(map[int]User),
    }
}
func (um *ConcreteUserManager) AddUser(user User) {
    um.users[user.GetID()] = user
}
func (um *ConcreteUserManager) GetUserByID(id int) User {
    return um.users[id]
}
func (um *ConcreteUserManager) GetAllUsers() []User {
    var allUsers []User
    for _, user := range um.users {
        allUsers = append(allUsers, user)
    }
    return allUsers
}
// 打印用户信息的函数,遵循 KISS 原则
func printUserInfo(user User) {
    fmt.Printf("用户 ID: %d, 姓名: %s, 邮箱: %s\n", user.GetID(), user.GetName(), user.GetEmail())
}
// 主函数,展示功能使用
func main() {
    // 创建用户管理实例
    userManager := NewConcreteUserManager()
    // 创建用户
    user1 := &ConcreteUser{
        id:    1,
        name:  "Alice",
        email: "alice@example.com",
    }
    user2 := &ConcreteUser{
        id:    2,
        name:  "Bob",
        email: "bob@example.com",
    }
    // 添加用户到用户管理系统
    userManager.AddUser(user1)
    userManager.AddUser(user2)
    // 获取单个用户信息
    retrievedUser := userManager.GetUserByID(1)
    if retrievedUser != nil {
        printUserInfo(retrievedUser)
    }
    // 获取所有用户信息
    allUsers := userManager.GetAllUsers()
    fmt.Println("所有用户信息:")
    for _, user := range allUsers {
        printUserInfo(user)
    }
}

三、总结

在使用 Cursor 等 AI 工具生成代码时,融入 “第一性原理”“DRY 原则”“KISS 原则”“SOLID 原则”“YAGNI 原则” 等方法论,能有效提升代码质量。这些原则相互配合,从不同维度保障代码的可靠性、可维护性和开发效率,为软件开发奠定坚实基础。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐