2013-04-08 18 views
1

這是一個長期運行的問題,每次我開發時都會讓我感到困惑。CodeIgniter模型中的重複代碼在多大程度上可以使用?

我想這不是CodeIgniter特有的,但是當我使用它時,我會在我的示例中考慮它。

首先,這是更好的:

function add_entry($data_array) 
{ 
    //code to add entry 
} 

function edit_entry($data_array) 
{ 
    //code to update entry 
} 

OR

function save_changes($what,$data_array) 
{ 
    //if what == update update 
    //otherwise insert 
} 

都產生相同的作用,但是否真的不管你使用哪一個?

找到更復雜的東西。

我有一個頁面,我需要從數據庫中獲得一個條目。

我也有一個頁面,我需要從用戶指定列中排序的同一數據庫中獲取所有條目。

我的最終方法類似於

function($data_array,$order_by='',$limit='') 
{ 
    //get where $data_array 
    //if order_by!='' add order by 
    //if limit !='' add limit 
} 

當我開發我的應用程序,實現新的地方,我需要「相似」的數據庫功能我是什麼感覺就像黑客先前的方法,使他們一起工作的功能我所有的案例場景。這些方法最終包含大量的條件語句,並且在一些情況下變得相當複雜,有些情況下有4或5個輸入參數。

我錯過了這個觀點嗎?我不想要重複的代碼,當大部分功能非常類似時,我覺得這種「黑客」方法最適合。

有人可能會建議嗎?

最後,我的管理功能是管理控制器中同一應用程序的一部分。我有一個管理模型,其中包含管理數據庫交互的特定方法。然而,我使用'用戶'模型的一些模型功能。

FOr例如,如果在管理頁面上我需要獲取數據庫條目的詳細信息我可以加載用戶模型以訪問此功能。對此沒有任何錯誤/不安全感?對?

除了在我的管理模型本身中,我需要獲取有關用戶數據庫條目的數據,所以我直接從我的管理模型中調用我的用戶模型。這是嚴格的,但是爲什麼?如果我需要數據,並且在我的用戶模型中已經有了一個方法來獲取它......在管理模型中重寫代碼似乎沒有多大意義,但是每次調用該函數時都會再次加載整個用戶模型?

非常感謝。

+0

一如既往:不要重複自己!爲什麼不把你的函數放在你的模型的基類或通用的DAO中? – 2013-04-08 12:03:05

回答

1

按順序,在模型中添加編輯與保存。就我個人而言,我在MY_Model中建立了一個保存,根據傳遞的數據中是否存在主鍵來選擇是保存還是編輯,所以顯然我更喜歡這種方法,這意味着代碼的重複性減少很多,因爲我可以使用保存任何沒有模型功能的表格。

至於第二個問題,我認爲這取決於情況。我也有一些功能,它們有很多的條件,取決於它們的用途和用途。在某些情況下,我發現這使得代碼的易讀性有點粗糙。如果你通過if語句運行它們,它也可能會影響性能。 DRY是一個概念,並非規則,與其他設計概念一樣,有些時候它們只是沒有意義,就像數據庫規範化一樣,我個人認爲它很容易過度規範化數據庫並破壞性能和可用性。

最後,在管理代碼中使用用戶函數。我根本沒有看到任何問題,反過來也許不是這樣,但是因爲它是一個「管理」功能而重寫一個功能,當它與用戶功能相同時,這是毫無意義的。所以你在那裏是正確的,這是浪費時間和空間。

相關問題