2010-11-04 43 views
2

可以請任何人解釋這是什麼利弊?我的意思是,沒有使用ORM框架/ JPA規範。應該只將持久性邏輯放在域模型bean還是放在DAO中?

它涉及實體之間的多對多和多對一關係。試想一下,實體關係

老師 - 學生(很多到很多)

醫生 - 病人(一到多)

我的問題無論我們是否可以在Doctor bean上放置getPatients()方法或在Teacher bean上放置getStudents(),或者它是否應該是POJO,並且所有這些東西都應放置在DAO中呃。

我經常看到的第一種方法是在對象模型bean要麼擴展爲它們提供對服務/持久性Facades的訪問的類的情況下使用,要麼是在spring中與它們一起注入等等。有利的是, call doctor.getPatients();幾乎在應用程序的每個地方,而不是從DAO獲得結果。

有沒有第一種方法很方便的情況?因爲我看到很多案例都是這樣完成的,我想知道它是有目的的,還是業餘主義的還是舊式的。

回答

1

遵循KISS原則。 DAO非常適合從域邏輯中抽象出持久性的機制。域對象只是將狀態從一層傳遞到另一層,通常其中的業務邏輯很少。這意味着域對象(又名DTO)可以有很多JPA註釋來指示某種ORM框架的持久性,還有JAXB註釋,以允許將DTO容易地編組爲XML以供Web服務傳輸。

我的一般傾向是有一個業務對象專用於在單個DTO上操作,以某種方式改變其狀態,並由業務規則驅動。服務(這是JTA事務邊界)管理業務對象的集合,並基本形成應用程序事務。這遵循大量細粒度物體的一般OOD原理,其目的非常明確。

+0

我也更喜歡一個單一的業務和持久性類專門操作單個DTO ......但我從來沒有真的想過一個服務作爲「JTA交易界限」,這似乎是一個非常好的做法...很高興知道 – lisak 2010-11-04 23:09:05

+0

@lisak感謝您接受投票:-)您可能想看看這個堆棧溢出問題:http://stackoverflow.com/questions/1079114/spring-transactional-annotation-best-practice – 2010-11-04 23:41:46

4

你可以做任何你想做的事,但無處不在的模式是DAO模式。 重點是要separate your concerns如果你有一個域對象,那麼你有可能在那裏有一些業務邏輯。你真的想把持久性邏輯放在業務邏輯之上嗎?您的應用程序將變得不易維護,更少(容易)可測試,並且具有更多錯誤。一旦你做出一個有問題的設計決定,更多的肯定會跟着......

+0

我也更喜歡簡單的「Spring框架」方式嚴格關注分離,具有pojos和dao層。但我正在使用的一些(現代/年輕)軟件正在採用第一種方法,所以我想知道爲什麼。對於我自己的應用程序開發,我只是保持第二種方法,那肯定是 – lisak 2010-11-04 23:05:07

+0

@lisak,你應該在開發團隊中採用一致的方法。 – hvgotcodes 2010-11-05 01:12:51

+0

我正在做我自己的項目,我懶得被僱用:-)感謝您的回覆 – lisak 2010-11-05 01:19:57

相關問題