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

做网站的人叫什么我的百度账号

做网站的人叫什么,我的百度账号,青岛专门做网站的公司,网站建设不完整之前不建议推行什么是伪重载? "伪重载"指的是通过单一函数定义配合参数默认值和条件逻辑来模拟传统编程语言中方法重载的效果。与真正的函数重载(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/wzjs/130003.html

相关文章:

  • marketing 网站设计榆林百度seo
  • iis7 发布asp网站404全国广告投放平台
  • 仿uehtml WordPress郭生b如何优化网站
  • 网站建设客服专员怎么在百度制作自己的网站
  • 成都网站建设麦格思如何注册域名
  • 网站设计思想seo推广论坛
  • wordpress 仿站思路企业线上培训平台
  • wordpress dux主题设置安卓优化大师app下载
  • p2p网站开发用什么平台sem竞价推广代运营
  • 安装wordpress时选择中文语言失败站长seo查询工具
  • 做一家拍卖网站需要什么资质新开传奇网站发布站
  • 网站建设哪家质量好优化大师平台
  • 拟定一个物流网站建设方案友情链接平台赚钱吗
  • 惠州网站制作公司哪家好软文发稿平台有哪些
  • 宝马itms做课网站如何分步骤开展seo工作
  • 大型网站建设多少钱郑州网络营销顾问
  • 广州推广策划公司北京seoqq群
  • 照片做视频的软件 模板下载网站口碑营销经典案例
  • 网站管理问题线下推广方式都有哪些
  • 甜品网站模板seo有什么作用
  • 做虚假网站判多少年2022好用值得推荐的搜索引擎
  • 邢台专业做网站价格最近的新闻热点
  • .net双拼做公司网站怎样注册自己网站的域名
  • 大连零基础网站建设培训中心网络培训班
  • 社交网站开发实例seo优化排名教程百度技术
  • 全国工商信息查询重庆seowhy整站优化
  • 网站素材设计框架seo网站推广优化就找微源优化
  • 北京网站建设在线软文范例100字以内
  • 整套html企业网站模板100大看免费行情的软件
  • 互联网站备案信息seo排名优化表格工具