2013-07-23 28 views
2

在一對多數據庫映射場景中,假設一個部門可以有多個員工,那麼設計DAO層的最佳實踐是什麼?MVC中的單個DAO或多個DAO?

我應該有一個通用DAO類來獲取/設置部門對象和get/set employees對象或兩個單獨的DAO類departmentDAO和EmployeeDAO分別獲取/設置部門對象和員工對象?

回答

0

我會用一個dao部門和另一個員工分開。我認爲紅旗是:你會稱爲聯合道?

如果一個清晰直觀的名字不會立刻出現在您的腦海中,那麼這是一種潛在的代碼異味。如果這個名字不會跳出來,它肯定會讓看看你的代碼的其他程序員感到困惑。爲什麼把兩樣東西粘在一起很明顯?

一些準則:

  1. 如果是員工和承包商,例如,我可能給多一點信任對他們組合成一個通用的,但即使如此,這是有點可能我就會讓他們分開除非我有強烈的理由不把它們分開。

  2. 如果您的項目在15或20個DAO中開始變大,您最終可能會決定去一個DAO,但這是您可以在下游做出的決定。那麼也許你可以製作一個HumanResources DAO或類似的東西。這主要是爲了防止過度佈線。

將部門和員工分開的可能性很小,並且在維護代碼的清晰度和易用性方面可能會有一定程度的提高。如果你有充分的理由,未來將它們結合起來並不難。

這是我的要求。

+1

如果這兩個類沒有關係,那麼使用兩個單獨的DAO將是顯而易見的。我使用Hibernate的java類到數據庫表映射,它有一對多的關係,所以我想知道是否有任何優勢將兩個DAO結合在一起。 –

0

事實上,它看起來像你對我至少需要3點不同的DAO:

  • DepartmentDAO
  • EmployeeDAO
  • EmployeeCollectionDAO

事情是 - 單一的實體的映射和實體組的映射有顯着差異。因此,他們應該由不同的結構處理,否則你有違反SRP的風險。

另外,Department應該與Employee實例的集合進行交互,而不是分別與每個實例進行交互。