我正在阅读福勒的重构书,并看到了保留整个对象.一个不同的,更新的观点说,这种重构与你应该做的完全相反:清洁代码会谈 - 不要寻找东西!.
Fowler确实提到过,您应该查看该方法是否可以移动到使用大型参数列表的类.我认为这将是唯一合理的选择.这种重构看起来像是一种定义不明确的方法的创可贴.
福勒的源材料有点陈旧.流行的智慧是让这种技术成为渡渡鸟的方式,还是在你想要进行这种重构的时候?或者我误解了测试驱动的风格,因为这些例子涉及对象构造,而不是消息发送?
我使用 vim 的 :! 一直是外部命令函数,通常提供 % 作为 shell 命令的参数。例如 :
:!psql -f %
Run Code Online (Sandbox Code Playgroud)
我在我使用的 .bashrc 中也有很多 bash shell 函数。例如:
psql-h1 ()
{
/usr/bin/psql -hh1 -d mydb "$@"
}
Run Code Online (Sandbox Code Playgroud)
这些 bash 函数不能从 :! vim 里面。有没有办法让它们可用?
我希望允许用户使用 PUT 调用有选择地更新字段。在 pydantic 模型上,我将字段设为可选。在 FastAPI 处理程序中,如果模型属性为 None,则未给出该字段并且我不更新它。
这种方法的问题在于客户端无法“清除”某些类型不需要的字段。
特别是,我希望客户端能够通过在 JSON 中发送空值来清除日期字段。如何检测客户端发送 null 或客户端根本不发送字段/值之间的差异?在任何一种情况下,模型属性都只是 None 。
我正在尝试使用同一表中另一行的值更新表中的多个列:
CREATE TEMP TABLE person (
pid INT
,name VARCHAR(40)
,dob DATE
,younger_sibling_name VARCHAR(40)
,younger_sibling_dob DATE
);
INSERT INTO person VALUES (pid, name, dob)
(1, 'John', '1980-01-05'),
(2, 'Jimmy', '1975-04-25'),
(3, 'Sarah', '2004-02-10'),
(4, 'Frank', '1934-12-12');
Run Code Online (Sandbox Code Playgroud)
任务是来填充younger_sibling_name
,并younger_sibling_dob
用最接近他们年龄的人的姓名和出生的日子,但不是旧的或相同的年龄。
我可以dob
轻松设置弟弟妹妹,因为这是确定要与相关子查询一起使用的记录的值(我认为这是一个例子?):
UPDATE person SET younger_sibling_dob=(
SELECT MAX(dob)
FROM person AS sibling
WHERE sibling.dob < person.dob);
Run Code Online (Sandbox Code Playgroud)
我只是看不到任何方法来获得name
? 对于每个 MAX 选择
,实际查询将运行大约100 万条记录,每组 100-500 条,因此性能是一个问题。
编辑:
在尝试了许多不同的方法后,我决定采用这种方法,我认为它可以很好地平衡能够用中间结果验证数据,显示逻辑的意图,并充分执行:
WITH sibling AS ( …
Run Code Online (Sandbox Code Playgroud) sql postgresql correlated-subquery window-functions sql-update