当前位置: 首页 > news >正文

网站策划书范文模板建设一个看电影的网站

网站策划书范文模板,建设一个看电影的网站,免费网站系统下载,微网站 布局什么是伪重载? "伪重载"指的是通过单一函数定义配合参数默认值和条件逻辑来模拟传统编程语言中方法重载的效果。与真正的函数重载(PostgreSQL支持的多同名函数不同参数实现)不同,伪重载是在一个函数内部处理不同参数组…

什么是伪重载?

"伪重载"指的是通过单一函数定义配合参数默认值条件逻辑来模拟传统编程语言中方法重载的效果。与真正的函数重载(PostgreSQL支持的多同名函数不同参数实现)不同,伪重载是在一个函数内部处理不同参数组合的情况。

为什么需要伪重载?

虽然PostgreSQL支持真正的函数重载,但在某些场景下,伪重载方式可能更有优势:

  1. 减少函数数量:避免创建大量相似函数
  2. 集中控制逻辑:所有变体在一个函数中实现
  3. 简化维护:修改只需在一个地方进行
  4. 参数组合灵活:处理复杂的可选参数组合

基本实现方式

CREATE OR REPLACE FUNCTION search_products(keyword TEXT DEFAULT NULL,category_id INTEGER DEFAULT NULL,min_price NUMERIC DEFAULT 0,max_price NUMERIC DEFAULT 999999
) RETURNS SETOF products AS $$
BEGINRETURN QUERY SELECT * FROM products WHERE (keyword IS NULL OR name LIKE '%' || keyword || '%')AND (category_id IS NULL OR category = category_id)AND price BETWEEN min_price AND max_price;
END;
$$ LANGUAGE plpgsql;

伪重载 vs 真正重载

真正重载示例

-- 版本1:关键词搜索
CREATE OR REPLACE FUNCTION search_products(keyword TEXT)
RETURNS SETOF products AS $$...$$;-- 版本2:分类搜索
CREATE OR REPLACE FUNCTION search_products(category_id INTEGER)
RETURNS SETOF products AS $$...$$;-- 版本3:价格区间搜索
CREATE OR REPLACE FUNCTION search_products(min_price NUMERIC, max_price NUMERIC)
RETURNS SETOF products AS $$...$$;

伪重载示例

-- 单一函数处理所有情况
CREATE OR REPLACE FUNCTION search_products(keyword TEXT DEFAULT NULL,category_id INTEGER DEFAULT NULL,min_price NUMERIC DEFAULT NULL,max_price NUMERIC DEFAULT NULL
) RETURNS SETOF products AS $$
BEGINRETURN QUERY SELECT * FROM products WHERE (keyword IS NULL OR name LIKE '%' || keyword || '%')AND (category_id IS NULL OR category = category_id)AND (min_price IS NULL OR price >= min_price)AND (max_price IS NULL OR price <= max_price);
END;
$$ LANGUAGE plpgsql;

伪重载的调用方式

-- 1. 仅关键词搜索
SELECT * FROM search_products(keyword => '手机');-- 2. 仅分类搜索
SELECT * FROM search_products(category_id => 5);-- 3. 仅价格区间搜索
SELECT * FROM search_products(min_price => 1000, max_price => 2000);-- 4. 组合搜索
SELECT * FROM search_products(keyword => '华为',category_id => 3,min_price => 2000,max_price => 5000
);-- 5. 无参数(获取所有产品)
SELECT * FROM search_products();

伪重载的实现技巧

1. NULL值处理

使用NULL作为默认值,并在WHERE条件中处理:

WHERE (param IS NULL OR column = param)

2. 参数验证

CREATE OR REPLACE FUNCTION get_orders(user_id INTEGER DEFAULT NULL,start_date DATE DEFAULT NULL,end_date DATE DEFAULT NULL
) RETURNS SETOF orders AS $$
BEGIN-- 验证至少提供一个参数IF user_id IS NULL AND start_date IS NULL AND end_date IS NULL THENRAISE EXCEPTION '必须提供至少一个过滤条件';END IF;-- 验证日期逻辑IF start_date IS NOT NULL AND end_date IS NOT NULL AND start_date > end_date THENRAISE EXCEPTION '开始日期不能晚于结束日期';END IF;RETURN QUERY SELECT * FROM orders WHERE (user_id IS NULL OR user_id = user_id)AND (start_date IS NULL OR order_date >= start_date)AND (end_date IS NULL OR order_date <= end_date);
END;
$$ LANGUAGE plpgsql;

3. 复杂条件构建

对于更复杂的场景,可以动态构建SQL:

CREATE OR REPLACE FUNCTION dynamic_search(table_name TEXT,columns TEXT[] DEFAULT ARRAY['*']::TEXT[],conditions TEXT DEFAULT NULL,order_by TEXT DEFAULT NULL,limit_count INT DEFAULT NULL
) RETURNS SETOF RECORD AS $$
DECLAREsql TEXT;col_list TEXT;
BEGIN-- 构建列列表IF columns = ARRAY['*']::TEXT[] THENcol_list := '*';ELSESELECT string_agg(quote_ident(col), ', ') INTO col_list FROM unnest(columns) AS col;END IF;-- 基础SQLsql := format('SELECT %s FROM %I', col_list, table_name);-- 添加条件IF conditions IS NOT NULL THENsql := sql || ' WHERE ' || conditions;END IF;-- 添加排序IF order_by IS NOT NULL THENsql := sql || ' ORDER BY ' || order_by;END IF;-- 添加LIMITIF limit_count IS NOT NULL THENsql := sql || ' LIMIT ' || limit_count;END IF;RETURN QUERY EXECUTE sql;
END;
$$ LANGUAGE plpgsql;

伪重载的优缺点

优点

  1. 单一入口点:所有调用通过一个函数处理
  2. 参数组合灵活:支持任意参数组合
  3. 减少重复代码:共享通用逻辑
  4. 易于扩展:添加新参数不影响现有调用

缺点

  1. 函数体可能复杂:需要处理多种情况
  2. 性能考虑:条件判断增加开销
  3. 文档需求高:需要清晰说明各参数组合
  4. 调试难度:错误可能发生在深层条件中

适用场景推荐

适合使用伪重载的情况

  1. 参数有多种可选组合
  2. 核心逻辑基本相同
  3. 参数之间有交互关系
  4. 需要频繁添加新参数

适合使用真正重载的情况

  1. 不同参数需要完全不同实现
  2. 参数类型可能导致歧义
  3. 性能是关键因素
  4. 各版本需要独立文档说明

实际应用示例:用户管理系统

CREATE OR REPLACE FUNCTION manage_user(action TEXT,  -- 'create', 'update', 'delete', 'get'user_id INTEGER DEFAULT NULL,user_name TEXT DEFAULT NULL,user_email TEXT DEFAULT NULL,user_status TEXT DEFAULT 'active'
) RETURNS JSON AS $$
DECLAREresult JSON;affected_rows INTEGER;
BEGINCASE actionWHEN 'create' THEN-- 验证必要参数IF user_name IS NULL OR user_email IS NULL THENRAISE EXCEPTION '创建用户需要提供用户名和邮箱';END IF;INSERT INTO users(username, email, status)VALUES (user_name, user_email, user_status)RETURNING row_to_json(users.*) INTO result;WHEN 'update' THEN-- 验证必要参数IF user_id IS NULL THENRAISE EXCEPTION '更新用户需要提供用户ID';END IF;UPDATE users SETusername = COALESCE(user_name, username),email = COALESCE(user_email, email),status = COALESCE(user_status, status)WHERE id = user_idRETURNING row_to_json(users.*) INTO result;WHEN 'delete' THEN-- 验证必要参数IF user_id IS NULL THENRAISE EXCEPTION '删除用户需要提供用户ID';END IF;DELETE FROM users WHERE id = user_idRETURNING row_to_json(users.*) INTO result;WHEN 'get' THENIF user_id IS NOT NULL THENSELECT row_to_json(users.*) INTO result FROM users WHERE id = user_id;ELSIF user_name IS NOT NULL THENSELECT row_to_json(users.*) INTO result FROM users WHERE username = user_name;ELSERAISE EXCEPTION '查询用户需要提供ID或用户名';END IF;ELSERAISE EXCEPTION '无效的操作类型: %', action;END CASE;RETURN json_build_object('success', TRUE,'action', action,'result', result);
EXCEPTION WHEN OTHERS THENRETURN json_build_object('success', FALSE,'action', action,'error', SQLERRM);
END;
$$ LANGUAGE plpgsql;

总结

PostgreSQL中的"参数默认值实现伪重载"是一种强大的设计模式,它通过:

  1. 默认参数:为参数提供NULL或合理的默认值
  2. 条件逻辑:在函数体内处理不同参数组合
  3. 动态SQL:必要时构建动态查询

这种模式特别适合处理有多种可选参数组合的查询和操作场景。虽然它不同于传统的函数重载,但在保持代码整洁和提供灵活接口方面表现出色。开发者应根据具体需求在真正重载和伪重载之间做出适当选择。

http://www.dtcms.com/a/419598.html

相关文章:

  • 网站自适应框架文档下载免费网站
  • 内蒙古建设工程造价信息网官方网站wordpress网站乱码
  • AI + 咨询 | 2025年咨询行业 AI 实战报告
  • COMSOL介电弹性体数值仿真指南:预拉伸圆形DEA的稳态变形分析(II)
  • SpringBoot连接PgSQL
  • 计算机组成原理:外围设备概述
  • 从《智能世界2035》看软件研发组织变革与未来形态
  • 人事处网站开发文献综述深圳公司有哪些
  • NET网站开发程序员招聘抚顺做网站的公司
  • 数字化工艺设计与仿真:汽车制造业成本节约与效率跃升的转型之路
  • 汽车价格战全面熄火了?不卷价格该卷什么?
  • 甘肃网站域名申请公司网站被攻击打不开怎么办
  • centos7 离线安装mysql8 并实现主从架构
  • YOLO 11 图像分类推理 Web 服务
  • SMTPman,smtp服务商在邮件发送中的方案!
  • 做logo去哪个网站商城网站建设二次开发
  • 云端服务器使用指南:利用Python操作mysql数据库
  • CKAD-CN 考试知识点分享(17) 金丝雀部署
  • 济宁住房和城乡建设局网站wordpresscom下载
  • Flutter版本选择指南:避坑3.27 | 2025年9月
  • 营销型网站建设seo优
  • 南宁网站建设制作后台加新tag wordpress
  • 海外建站平台网站建设投资
  • 【ORM】-1-SQLAlchemy介绍,以及原生sql应用
  • wordpress主题 苏醒百度seo排名如何提升
  • window pdf文件批量转高清图片png、jpg
  • 北京城乡建设门户网站凉州区住房城乡建设局网站
  • 安宝特案例丨从 “围台观摩” 到 “远程高清学”:安宝特AR远程医疗套装支撑南京医院手术带教
  • 在模板网站建站好吗网站制作公司网站
  • Parasoft C/C++test 测试中 main 函数重复定义解决方案