有两个功能:一个返回具有某些任务的工人的记录,另一个返回特定工作人员的任务。这两个函数在WHERE子句中具有相同条件的游标。
我的问题是,如何在一个地方定义这些条件?然后我的代码不会中断DRY principle。
提前致谢!
P.S。:我不想使用REF CURSORS因为它们不可靠。
答案 0 :(得分:4)
我认为DRY
(不要重复自己)是一个明智的经验法则是三角测量:如果三个地方存在相同的逻辑,那么将其提取到自己的模块中是值得的。但如果只存在于两个地方,请不要理会。 p>
然而,你并没有真正重复自己,是吗?你所拥有的是两个不同的查询返回两个不同的结果集(一个是WORKERS,另一个是TASKS),恰好碰巧有一些WHERE子句的共同点。这不是正确的重复。
如果你试图根除一行中两行代码执行相同操作的单个实例,那么最终将会出现一个非常难以理解且无法维护的程序。请记住,DRY是由Andy Hunt and Dave Thomas制定的,他们称自己是实用程序员,这是一个很好的理由:明智地应用这个原则并理解你为什么要这样做,而不是盲目地遵循教条。
答案 1 :(得分:3)
解决您对REF CURSOR的保留问题,为什么您认为它们不可靠?我从来没有遇到任何问题。什么可能让你感到悲伤是使用动态SQL来填充ref游标。但这是尝试删除虚构重复的功能,与使用游标变量无关。