2017-04-26 69 views
0

我已經被告知cffunction應該有不超過3個參數 - 有沒有更好的方法來編寫這個函數?每個參數都是前一個窗口中可能的過濾器,用於在where子句中過濾結果。coldfusion函數中的參數

<cffunction name="Example" access="remote" returntype="query"> 
    <cfargument name="keyword" type="string"> 
    <cfargument name="office" type="numeric"> 
    <cfargument name="builder" type="numeric"> 
    <cfargument name="sup" type="numeric"> 
    <cfargument name="mgr" type="numeric"> 
+4

1)函數可以有很多爭論,因爲它需要 2)你可以有默認值,如果這是有用 3)隨着結構和數組可以有效根據需要傳遞儘可能多的參數 4.)如果您發現自己一遍又一遍地傳遞相同的參數,則可能是一個對象更合適 5.)您是否有對這個3參數規則的引用? –

+0

感謝詹姆斯,我在去年的cfsummit上聽到了它。我認爲這是在乾淨的代碼會議..不知道這是否唯一的原因。因爲所有的參數都是url變量,我想我可以將URL結構傳遞給函數。會嘗試一下。 –

+1

@kevinfreese我聽說過有關乾淨的代碼的相同的事情。但據我瞭解,它更多的與1)一個函數,許多論點可能做得太多。它可以重構爲多個更小的函數嗎?和2)更容易遵循具有較少參數的函數的流程。 – Shawn

回答

2

你在你的問題有代碼比這更好的建議:

<cfargument type="struct"> 

的原因是,一個結構可以包含任何東西,不侷限於什麼功能真正需要。在問題中的函數中,它確實需要一個字符串和四個數字。

這就是說,你仍然可以傳遞一個結構,比如一個url到你的函數中。這是這一個簡單的問題:

myQuery = Example(argumentCollection = url);