用途:该模式用于让同一函数既能接收单个对象,也能接收数组,从而避免为单个与批量分别提供两套 API。资料将其定位为在创建 CRUD 操作、批处理 API 或工厂函数时使用的写法。
主要能力:参数类型声明为 T | T[];在函数顶部用 Array.isArray() 归一化为数组;后续全部逻辑只针对数组处理,形成单一代码路径。示例中 createServer 接收 clientOrClients 并归一化为 clients 后统一处理;delete 方法接收 recordingOrRecordings,归一化后映射出 id 再调用 bulkDelete。
命名约定:参数与归一化后的变量成对命名,如 recordingOrRecordings→recordings、clientOrClients→clients、itemOrItems→items、paramsOrParamsArray→paramsArray。
适用场景:CRUD 操作(创建、更新、删除)、批处理 API、接收依赖的工厂函数,以及任何“对一个或多个执行同一操作”的情形。
限制与不适用:当单个与批量具有不同语义、返回类型差异很大,或数组版本需要不同选项时,应跳过该模式。资料列出的反面做法包括:为单个和数组分别写函数(用户需记住两套 API)、强制所有调用都传数组(单个项写成 createRecordings([recording]) 很别扭),以及在重载中复制逻辑(应改为单一实现,例如归一化后统一调用 db.bulkInsert(items))。参考资料提到另有完整文章提供更详细说明与更多示例,但具体内容暂未提供。