全球首款为ai 应用编程的框架出现,AIfei横空出世

Aifei:面向 AI 编码的跨时代开发框架 

当业界都在讨论 AI 能否写代码时,Aifei聚焦于一个核心问题:开发框架该如何适配 AI 编程。面向使用者为ai 角度考来考虑需要一个什么样的框架,一个真正的为AI而存在的开发工具 AI Coding
 
AI 普及前、应用开发框架的很多理念比如MVC、多层架构等传统设计会造成内容冗余,不仅大量消耗 token、拉高代码出错率,形成了沉重的包袱,在这些理念在纯手工编码时犹为重要。但是在ai 时代其实生产方式变了,很多只是为了团队协作的设计根本不需要了,AI 能几分钟上百行代码,人类更应该 需要拿精力来审核代码,安全凭估,功能凭估,架构设计,作者说:这个时代变了,作为一款跨时代产品,它需要彻底颠覆了传统开发架构。 
当下很多人老板和新人认为 AI 生成代码即代表工作完成,却忽视了代码漏洞与潜在风险,这类成果往往只是 “伪完成”。根本无法交付,框架如果过于太多理念冗余,会造成AI写代码那么数据准不准,风险不好把控,在审核代码的时候更加要命 ,解决方式是先减少过份冗余理念,不该 暴露的理念应是框架完成,不该参与的理念的理伦就不用呈现,传统的过时理念果断抛弃, Aifei 构建的极简理念模式,框架层上基本感觉不到框架存在,既能高效发挥 AI 的生产效率,又能减少更多无效理念,这样人类的精力专精与把控代码质量与整体架构,实现人机协同、天人合一,完美契合 AI 时代的开发需求。 在开发底层工具上,采用采最java最新技术开发,将虚拟线程发挥到极致,版本一就能将性能飞升到40% 为边缘计算,嵌入式布署中带来新的署光,
看看作者怎么说,为什么也有精简开发的jfinal 为什么还要开发AIfei
Aifei并非 JFinal 迭代版,也不是 Spring 的简化版本,而是一次技术范式转变:从适配人类开发习惯,转向贴合大模型运行机制。它深知大模型存在上下文、注意力等限制,所有设计均围绕 AI 特性深度优化。 这款框架极致节省系统性能,十分适用于边缘计算、嵌入式开发、数据采集等资源受限的场景。依托 Aifei,行业将形成全新协作模式:AI 负责代码生产,人类专注架构设计、代码审核与安全评估,实现人机协同、天人合一,这也是软件开发未来的发展方向。
 国内资深的java工程师杜中福大神曾经也表示:

在 AI 时代,最有价值的不是"谁能更快地写代码",
而是"谁能更好地理解系统、做出正确的架构决策,更好的安全代码检查,质量审计,真正的更好的落地,"。

因为ai 时代可能会出现:以前新手是做不出来应用,现在能做出来,但是做出来不能用,所谓的workslop就是像工作,但是永远不能放心交付的工作,返工成本转交给更加专业的人,如果ai 写代码太多,会增加审核者的体力,还不如不要让ai 写代码,

怎么才能和ai分工合作呢,所以aifei框架产生了,

 

 

 

aifei 作者jfinal框架的创始人瞻波,

 

Aifei 官网:https://aifei.cn 

 

国内源码仓库示例,由aifei布道者谢双元首次发布  源码:https://gitee.com/xie_bi_yuan/aifei_demo
因为润生软件是国内第一家公司采用aifei用于开发的,所以作业一个热家技术的人,第一时间就爱上了aifei ,所以在网上发布了几篇使用心得,
占了个发布相关技术的先机,除了官方作者在仓库发布过相关信息外。

至2026年6月,社区最活跃的开发者,杜中福,sn  老徐同学,小佳  林羽,小木老师,玛雅牛,杨福海,爱做饭,东哥,冯程雨,snake, 小飞像,费振龙,子健,云天明,谢双元,排名较前的活跃开发者,当然也有很多高手,比如海哥,小奎,等很多开发者在社区帮助大家,不过有的人工作在写代码,比较稍显少一些,

总之这个社区特别活跃:

 

 其它资料如下:
第一章  信息论视角下的框架设计

 

 

image

在java技术不断更新的今天,如果你对aifei 置之不理,可能说明你离java  赛道久矣,如果你对java新技术感兴趣,也可以关注抖音fgxwan 本人正在用这个框架在开发,虽然也是学习尝试中,,
我们来看看详细信息吧!!!

 核心观念,这是一款为了人工智能开发应用而开发的跨时代的应用开发框架,由于减少了大量的技术理念,或者对于人类来说可能感 觉不到这是一个框架的理念存在,
// Out统一返回
层次二认知层面 消除多范式并存传统框架中开发者 AI需要同时掌握多套数据对象范式
传统框架的数据对象混乱Aifei 的统一抽象Entity数据库映射对象Row通用行也是 Model 的基类VO视图对象前端展示用直接返回 Row/Model框架自动序列化DTO数据传输对象Map Row接收参数PO持久化对象不存在Row 直接持久化ModelActiveRecord 模式User extends AifeiRowis-a Row 层次三生成层面 提供稳定的代码模式Just Service AI 提供了一个固定模板」,使代码生成具有高度可预测性Just Service 代码模板 AI 只需填入 [] 括号内的业务内容// Aifei Service 的固定代码模式AI 只需填入业务部分):@Path("/[资源名]") // 固定填资源名public class [资源]Service { // 列表/分页查询固定模式 public Page<[Model]> index(Map<?,?> filter, int pageNum, int pageSize) { String sql = "select * from [] #where(...) #orderBy(...)"; // 填业务 return [Model].sql(sql, filter).paginate(pageNum, pageSize); } // 查详情固定模式 public [Model] detail(int id) { return [Model].findById(id); // 填业务 } // 插入固定模式 public Out insert([Model] model) { model.insert(); // 填业务 return Out.ok(); } // 更新固定模式 public Out update([Model] model) { model.update(); // 填业务 return Out.ok(); } // 删除固定模式 public Out delete(int id) { [Model].deleteById(id); // 填业务 return Out.ok(); }} 优秀设计 这个模式的精妙之处结构固定变化点清晰AI 每次生成时只需关注「[资源名]」「[Model]」「[]」「[业务条件]」四个变量其余全是不变量生成准确率极高 第三章 数据库设计的五个突破
 

image

 

 
3.1 突破一链式 sql() 作为统一查询入口传统 JFinal 的查询 API 存在多入口问题 JFinal 多入口问题// JFinal 的多入口问题AI 需要选择正确的入口):User.dao.find(sql, paras); // 入口 1Model dao 对象User.dao.findFirst(sql, paras); // 入口 2同上User.dao.paginate(p, s, sel, from); // 入口 3注意 select from 要分开User.dao.template("key", paras); // 入口 4SQL 模板方式Db.find(sql, paras); // 入口 5Db 工具类Db.findFirst(sql, paras); // 入口 6同上Db.paginate(p, s, sel, from); // 入口 7注意 select from 要分开Db.getSqlPara("key", paras); // 入口 8先拿 SqlPara 再查// AI 在生成代码时经常在这 8 种入口之间犹豫并出错 Aifei 统一入口sql() 链式执行方法// Aifei 的统一入口sql() 链式调用// 所有查询都从 sql() 开始链式决定执行方式Db.sql(sql, params).find(); // 统一入口链式选择执行方式Db.sql(sql, params).findFirst();Db.sql(sql, params).findOne();Db.sql(sql, params).paginate(p, s);Db.sql(sql, params).queryLong();Db.sql(sql, params).update();// Model 版本同样统一User.sql(sql, params).find();User.sql(sql, params).paginate(p, s);User.sql(sql, params).forEachPage(10, page -> { ... }); 设计本质 设计本质这不只是 API 风格变化而是减少分叉」。AI 在生成代码时分叉越少出错概率越低统一入口让 AI 只需学会一个模式想查数据 sql(),然后链式选择执行方式 3.2 突破二Model is-a Row继承而非并列这是 Aifei 数据模型最优雅的设计决策之一值得深入理解 JFinal 的问题Model Record 是并列的两套体系 JFinalModel Record 是并列的两套体系// JFinal Model Record 是完全不同的类型Useruser=User.dao.findById(1);//返回Model<User>Recordr=Db.findFirst(sql);//返回Record完全不同的类型!)//两套API两种取值方式user.getStr("name");//Model取值r.getStr("name");//Record取值看起来一样但类型不同//问题当你需要对结果做统一处理时需要写两套代码//AI在生成处理逻辑时不知道该用Model还是RecordAifeiModelis-aRow类型统一//AifeiModelis-aRowModel继承自Row):publicclassUserextendsAifeiRow<User>{...}//User就是RowRow就是User//统一类型体系Useruser=User.findById(1);//返回User也是RowRowrow=Db.sql(sql).findFirst();//返回Row
 

image

 

 
// 统一 API因为 User 就是 Row):user.getName(); // user.get("name")row.get("name");// 统一处理可以用同一套逻辑处理 User Row):void process(Row row) { // 接收 RowUser 也可以传入 String name = row.get("name"); // ...} 架构洞见 架构洞见is-a 关系继承 has-a 关系组合在这里更优雅的原因业务代码不需要类型转换方法签名可以统一声明为 Row自然接受所有 Model 子类多态生效这是面向对象设计原则的完美应用 3.3 突破三of() 工厂方法消灭先查后改这是一个小设计但体现了极深的用户体验思考of() 工厂方法 vs 传统写法// 场景修改 id=123 的用户姓名// Spring JPA 写法先查再改两次数据库操作):User user = userRepository.findById(123).orElseThrow();user.setName("james");userRepository.save(user);// 问题为了改一个字段先发了一条 SELECT产生不必要的 IO// JFinal 写法需要先 new 一个 Model手动设置主键):new User().set("id", 123).set("name", "james").update();// 稍好 set("id", 123) 的写法不直观容易忘// Aifei 写法User.of(123).name("james").update();// of(123) = 创建持有 id=123 User 实例不查库// name("james") = 设置 name 字段流式 setter// update() = 只更新被 set 的字段 优秀设计 优秀设计点of(id) 方法在不查数据库的情况下创建一个持有主键的对象实例update() 框架知道这是 WHERE id=? 的更新一行代码零多余 SQL语义完全清晰 3.4 突破四:#where / #and / #orderBy 结构化动态 SQL这是 Aifei SQL 管理上最具革命性的创新值得用较多篇幅分析 为什么动态 SQL AI 的噩梦动态 SQL 的本质问题是SQL 语句的形状在运行时才确定传统的解决方案是模板分支」,但这对 AI 成极不友好 传统动态 SQL分支多易出错有注入风险// 传统动态 SQLJFinal/MyBatis 风格):String sql = "select * from user where 1=1";// AI 需要生成这样的 Enjoy 模板有多种写法容易出错):#sql("findUser")select*fromuserwhere1=1#if(name)容易漏写andnamelikeconcat('%',#para(name),'%')#end容易漏写#end#if(status!=null)andstatus=#para(status)
 

image

 

 
#end #if(minAge != null) and age >= #para(minAge) #end #if(orderField != null && !orderField.isEmpty()) order by #(orderField) #(orderDir) SQL注入风险orderField 直接拼 #end#end// 问题// 1. 每个条件都要 #if/#end 包裹AI 容易漏写 #end// 2. 排序字段直接拼字符串有 SQL 注入风险// 3. 生成结构不稳定不同 AI 可能产生不同风格 Aifei #where / #and / #orderBy结构化零风险// Aifei 新动态 SQL 指令// 格式:#where(字段, 操作符, 变量名) -- 变量为 null 时自动忽略// #and(字段, 操作符, 变量名) -- 同上// #orderBy(白名单字段列表) -- filter 中读取排序意图// 同样的查询需求Aifei 写法String sql = "select * from user" + " #where(name, 'like', name)" + " #and(status, '=', status)" + " #and(age, '>=', minAge)" + " #orderBy(created, id, name)"; // 括号内是白名单只允许这三个字段排序// Java 调用 filter Mapnull 值自动过滤):return User.sql(sql, filter).paginate(pageNum, pageSize);// 前端传 filter:{ name: 'james', status: 1 } // minAge 不传// 生成 SQLselect * from user where name like ? and status = ?// 前端传 filter:{ orderBy: { field: 'created', order: 'desc' } }// 生成 SQL:... order by created desc 因为 created 在白名单中 三大指令的设计精髓指令解决的问题设计精妙之处#where(f,'op',v)动态首个条件何时用 WHERE变量为 null 时整条指令不输出自动选择 WHERE 或省略#and(f,'op',v)动态追加条件变量为 null 时整条指令不输出无需 #if 包裹#orderBy(whitelist)安全动态排序白名单机制只有括号内的字段可排序天然防注入 设计本质 设计本质这三个指令把动态 SQL命令式你告诉我什么时候加条件)」变成了声明式你告诉我条件规则我自动处理)」。声明式代码对AI更友好因为意图清晰没有隐藏的状态转换3.5突破五批量操作的自动分组这个功能解决了一个在实际开发中频繁出现但长期被忽视的痛点批量写入时各行字段不一致Aifei批量操作自动分组字段结构不一致也完美处理//典型场景Excel导入用户数据不同行填了不同字段//第1行姓名+手机号//第2行姓名+邮箱+年龄//第3行姓名+手机号+部门//传统解决方案非常繁琐)://1.先按字段组合分组//2.每组单独构造PreparedStatement//3.每组单独执行批量
 
 

image

 

// 或者每行单独 INSERT性能极差// Aifei 解决方案List<Row> rows = new ArrayList<>();rows.add(new Row().set("name","Alice").set("phone","13800000001"));rows.add(new Row().set("name","Bob").set("email","bob@test.com").set("age",25));rows.add(new Row().set("name","Carol").set("phone","13800000003").set("dept","研发"));Db.batch().insert("user", rows); // 框架自动按字段组合分组分组执行批量插入// Aifei 内部自动// 组1name+phone):Alice, Carol 一次 batch// 组2name+email+age):Bob 一次 batch 架构洞见 这个功能的背后是 BatchUpdateExecutor 的设计它先按字段集合 groupByFields(),然后在事务中按分组执行批量操作这个设计让批量操作从需要预处理变成了直接丢进去就行」,符合信息论原则——不要让使用者维护本可以自动推导的状态 第四章 AifeiConfig 集中式配置的哲学 4.1 分散式配置 vs 集中式配置Spring Boot 的配置哲学是约定优于配置」——尽量不让用户配置用约定代替这在小项目中很方便但在大模型生成代码时是个严重问题 约定的副作用隐式行为 约定优于配置隐式行为对 AI 不友好// Spring Boot 隐式行为示例// 你加了 spring-boot-starter-data-jpa 依赖// 框架自动扫描所有 @Entity // 自动创建表如果 ddl-auto=create),// 自动配置 EntityManager// 自动开启事务管理// 这些行为都是隐式在代码里看不见// AI 的影响// AI 生成代码时不知道这些隐式行为的存在// 生成的代码可能与隐式行为冲突如手动配置了 DataSource// AI 无法通过读代码来理解完整的系统行为 Aifei 显式配置系统行为完全可见// Aifei 显式配置」:所有配置都在 AifeiConfig 一览无余public class AppConfig implements AifeiConfig<In, Out> { public void config(Settings<In, Out> settings) { // 服务器显式指定一目了然 settings.setServer(new UndertowServer(), new IoDispatcher()); // 处理器显式添加执行顺序清晰 settings.addHandler(new AuthHandler()); settings.addHandler(new LogHandler()); // 参数注入显式注册没有魔法 settings.configArgument(kit -> kit.register(Account.class, LoginArgument.class)); } public void config(Routes routes) { // 路由显式扫描哪个包带哪个拦截器 routes.scan("cn.myapp.api", newAuthInterceptor());}publicvoidconfig(Pluginsplugins){
 
 
// 数据库显式配置参数清晰 AifeiDbPlugin db = new AifeiDbPlugin("main", new DruidSupplier(...)); db.addModelSet(new ModelSet()); plugins.add(db); }}// AI 读这段代码能完全理解系统做了什么没有任何隐式行为 优秀设计 AifeiConfig 的三个 config 重载方法体现了一个入口参数类型即语义的设计哲学config(Settings) 配系统级设置config(Routes) 配路由config(Plugins) 配插件参数类型本身就是文档 4.2 HIO 模型 处理流程的极简化Aifei HIOHandler-Input-Output模型是对 Servlet 生命周期的重新抽象概念 Aifei 中的含义为什么这样设计HandlerH请求处理链上的节点如认证日志限流显式配置顺序行为可预测InputI用户自定义的请求输入对象不依赖 Servlet可切换 IO 实现OutputO用户自定义的响应输出对象 Out 统一返回结构序列化由框架完成Dispatcher将请求分发到正确 Service 方法的组件分发逻辑框架化无需用户干预 新手理解 新手理解你可以把 HIO 理解为一条加工流水线」。Input 是原材料HTTP 请求),Handler 是一道道工序认证日志等),Dispatcher 是工厂调度员找到正确的 Service 方法),Output 是成品HTTP 响应)。这条流水线的每一段都是显式配置的没有隐藏工序 第五章 优秀代码范式精讲 5.1 范式一链式 API 的极致运用Aifei 全面采用链式 API这不仅仅是风格偏好而是减少临时变量降低认知负载的工程决策 设计原则每一步都有意义每一步都不多余链式 API 三要素示例// 链式 API 的设计三要素// 1. 每个方法返回 this 或下一阶段对象使链式成为可能// 2. 方法名即操作语义name(v) set("name",v) 更直接// 3. 终结方法表明操作类型find/insert/update/delete// 示例一Model 的链式构建与操作new User() // 创建实例 .name("james") // 设置字段方法名 = 字段名 .age(25) // 设置字段 .email("j@test.com") // 设置字段 .insert(); // 终结插入数据库
 
 
// 示例二查询链User.sql("select * from user #where(status,'=',status)", filter) .paginate(pageNum, pageSize); // 终结分页查询// 示例三修改链of 工厂 + 链式设置 + 终结User.of(123) // 工厂持有 id=123 的实例 .name("newName") // 设置要更新的字段 .status(2) // 设置要更新的字段 .update(); // 终结只更新被设置的字段 设计本质 链式 API 的深层价值代码的阅读顺序与执行顺序一致从左到右从上到下),零跳跃理解成这对于 AI 生成代码尤其重要AI 可以按自然语言描述的顺序直接生成链式代码 5.2 范式二统一返回对象 OutOut Aifei 中所有 Service 方法操作类接口的统一返回类型查询方法返回具体数据操作方法返回 Out)。Out 统一返回对象// Out 的设计理念统一成功/失败表达// 静态工厂方法语义极清晰return Out.ok(); // 成功无消息return Out.ok("操作成功"); // 成功带消息return Out.ok(user); // 成功带数据return Out.fail("用户不存在"); // 失败带原因return Out.fail("余额不足", 402); // 失败带错误码// Spring 的对比// Springreturn ResponseEntity.ok().body(data) // 冗长// Springreturn ResponseEntity.status(400).body(error) // 更冗长// Aifeireturn Out.ok(data) / return Out.fail(msg) // 简洁 在事务中返回 Out 的妙用Out + 事务的完美结合// 传统写法事务和返回值分离需要额外变量Out result;Db.tx(() -> { // ... 业务逻辑 ... result = n == 1 ? Out.ok("成功") : Out.fail("失败"); // 无法在 Lambda 内赋值外部变量 return result.isOk(); // JFinal 返回 boolean});return result; // 还需要额外返回// Aifei 写法事务直接返回业务结果return Db.transaction(tx -> { int n1 = Db.sql("update account set money=money-? where id=?", money, fromId).update(); int n2 = Db.sql("update account set money=money+? where id=?",money,toId).update();returnn1==1&&n2==1?Out.ok("转账成功"):Out.fail("转账失败");//失败时框架自动回滚Out.fail触发回滚机制});//事务和业务结果完美合并无多余变量代码意图100%清晰优秀设计Out在事务中的设计尤为精彩transaction()Lambda直接返回Out框架根据Out.isOk()决定提交或回滚业务逻辑和事务控制完全融合零冗余代码5.3范式三参数自动注入的分层设计
 
 
Aifei 的参数注入系统是可扩展的固定模式的典范设计参数注入的四层架构// 参数注入的分层结构// 层次1基础类型框架内置无需配置public void someAction(int id, String name, long timestamp) { ... }// 直接从 URL 参数注入零配置// 层次2Map框架内置接收所有参数public void search(Map<?,?> filter) { ... }// 所有 URL/表单参数合并为 Map零配置// 层次3Model/Row框架内置JSON 反序列化public Out save(User user) { ... }// 请求体 JSON 自动反序列化为 User零配置// 层次4自定义类型用户扩展一次注册处处可用// 注册阶段只写一次):settings.configArgument(kit -> { kit.register(Account.class, LoginAccountArgument.class); kit.register(Tenant.class, TenantArgument.class);});// 使用阶段任意 Service 方法直接声明):public Page<Order> myOrders(Account account, Tenant tenant, Map<?,?> filter) { String sql = "select * from order where user_id=? and tenant_id=?"; return Order.sql(sql, account.getId(), tenant.getId()).paginate(1, 20);} 架构洞见 这个设计的精妙四个层次从简单到复杂每一层都有明确的职责扩展点清晰新手用层次1-3就够了高级用法在层次4但接口一致这是渐进式复杂度的体现 5.4 范式四forEachPage 大数据分批处理这个 API 设计展示了 Aifei 大数据量场景下的用心forEachPage大数据量分批处理的最优解// 问题场景对全表用户发送邮件通知// 危险写法全量查询List<User> allUsers = User.sql("select * from user").find();for (User u : allUsers) { sendEmail(u); }// 问题100万用户 = OOM内存溢出// 传统分页写法繁琐int page = 1, size = 100;while (true) { Page<User> p = User.sql("select * from user").paginate(page, size); for (User u : p.getRows()) { sendEmail(u); } if (page >= p.getTotalPage()) break; page++;}//AifeiforEachPage优雅分批User.sql("select*fromuser").forEachPage(100,(Page<User>page)->{for(Useru:page.getRows()){sendEmail(u);}returntrue;//继续下一页//returnfalse;//提前终止});//自动处理分页逻辑内存安全可提前终止代码极简优秀设计forEachPage的设计亮点Lambda返回boolean控制是否继续迭代这让找到目标即停的场景变得优雅同时框架内部使用游标式分页每次只加载一批数据到内存天然内存安全
 
 
第六章 Aifei 的设计哲学总结
6.1 七个核心设计原则
原则一代码即文档好的代码不需要注释就能理解Aifei API 命名遵循读代码 = 读业务描述的原则User.of(123).name("james").update(); // 直读 id=123 的用户名字改为 jamesDb.batch().insert("user", rows); // 直读批量插入 rows user Out.ok("操作成功"); // 直读返回成功消息是操作成功 原则二单一入口链式分叉每种操作只有一个入口执行方式通过链式调用在末端分叉而不是在入口处分叉// 所有查询唯一入口sql()Db.sql(sql, params).find() // 末端分叉查多条Db.sql(sql, params).findFirst() // 末端分叉查第一条Db.sql(sql, params).paginate(p,s) // 末端分叉分页Db.sql(sql, params).queryLong() // 末端分叉查单值// 学一个入口通过末端方法名选择行为零歧义 原则三显式优于隐式所有系统行为都在代码中可见没有约定魔法没有注解黑盒没有自动配置惊喜 原则四渐进式复杂度简单场景用简单 API复杂场景才需要复杂配置简单场景绝不被复杂场景的存在所污染// 简单场景新手):User.findById(1);// 中等场景User.sql("select * from user #where(name,'=',name)", filter).find();// 复杂场景高级):User.sql(sql, filter).forEachPage(100, page -> { ...; return true; });// 每层复杂度独立新手不需要了解高级用法才能入门 原则五信息无冗余每一行代码都承载业务信息不存在仅用于满足框架要求的样板代码测量标准把这行代码删掉业务信息会丢失吗 保留不会 删除 原则六类型即约束用类型系统表达约束而不是用文档或约定。`#orderBy(created, id)` 的白名单就是类型约束的体现——在白名单里的字段在类型层面就被排除了 原则七为下一个人 AI设计
 
 
代码的最终读者不是写代码的人而是维护代码的人人或 AI)。Aifei 的每个设计都在问:「这段代码AI或下一个开发者能一眼看懂吗?」 6.2 Aifei 的哲学定位"极简不是目标而是结果当你把所有不必要的东西都去掉之后剩下的就是极简的。"Aifei 的极简不是功能少」,而是概念少」。它功能完整覆盖了 JFinal 的所有数据库能力但概念数量减少了 60% 以上这就是架构设计中最难的部分」:不是加功能而是在加功能的同时不增加概念Aifei 做到了这一点是它最值得学习和尊重的地方设计维度传统框架的答案Aifei 的答案框架服务谁人类开发者的工程习惯大模型的工作机制 + 人类的阅读体验复杂度来自哪功能丰富场景覆盖不必要的概念分层和样板代码如何衡量好坏功能完整性社区生态注意力浓度概念密度生成稳定性配置哲学约定优于配置隐式行为显式配置行为完全可见扩展哲学Plugin/SPI 复杂扩展点Handler/ArgumentProvider 最小扩展接口数据操作多套并行体系Entity/DTO/VO/Record单一体系RowModel is-a Row动态 SQL命令式分支(#if/#end声明式指令(#where/#and/#orderBy

 

posted @ 2026-05-03 08:48  谢双元小号  阅读(115)  评论(2)    收藏  举报