![]()
每个程序员都见过那种代码:500行的函数里,SQL语句、错误处理、业务逻辑和API调用像打翻的乐高混在一起。你想重构,把关注点拆开——这想法没错。但网上教程教你的那个"标准答案",正在制造另一种灾难。
这就是Repository模式。初衷很简单:把业务逻辑和数据层隔开。Martin Fowler的原话是,用「一个类似集合的接口,在领域层和数据映射层之间进行协调」。听起来优雅,抄作业的人抄歪了。
![]()
歪在哪?接口定义的位置。常见做法是按表建一个巨型接口,把所有可能用到的数据库方法塞进去——GetUser、DeleteUser、50个边缘场景的查询方法。这个文件变成全公司服务的垃圾填埋场,谁需要新方法就往里扔。
作者管这叫"生产者定义接口":写数据库层的人决定提供什么,用的人只能被动接受。结果是接口膨胀、依赖混乱、测试时想Mock都得拖进一整头大象。
![]()
解法是倒过来:消费者定义接口。需要查询用户生日的那个服务,自己声明一个只有GetUserBirthdayByID的精简接口。数据库层去实现它。接口变小了,依赖干净了,测试时Mock两行代码搞定。这才是Fowler说的"类似集合"——不是超市仓库,是你家抽屉,只放你需要的东西。
一位读者在评论区说,他们团队把巨型接口拆成消费者定义的接口后,单元测试的Mock代码从200行降到了15行。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.