让我们说,我已经决定要去Java EE堆我的企业应用程序。

现在,对于领域建模(或:设计米的软),其Api我可以放心地假定,并使用,并且这是我应该远离...说,通过一个抽象层?

例如,

  1. 我应该去和垃圾我的模型随叫冬眠/访问用户的API?或者,我应该建立一种抽象的...一个持久层的我自己,以避免硬盘编码,对这两个特定持久性Api? 我为什么问这个: 几年前,有个高堂API,它得到了所取代休眠状态。如果一个已经设计了一个持久层和编码的休息的模式对这一层(而不是乱丢垃圾的模型呼吁特定的供应商API),这将允许一个为(相对)很容易地从高堂冬眠到xyz。

  2. 它建议作出积极使用的*QL提供的持久性供应商在您的领域模型?我不知道有任何现实世界问题(如性能、可伸缩性、便携性,等等)所产生的大量使用的一个非常样的语言。 我为什么问这个: 我想避免、尽可能的,编写定制的代码时,同样可以通过查询语言是更多的便携式比SQL。

对不起,但我是一个完整的新手到这个区域。在哪里我能找到更多的信息,关于这一主题?

有帮助吗?

解决方案

这里是我认为是传统的观点:

  • 该实体在项目的形式域模型。他们应该重复使用并不紧密结合的持久性技术(我将稍后再回来有关紧与松散耦合)
  • 业务层、使用领域模型,但也暴露了服务和其他东西。
  • 数据访问层负责持续存在的领域模型(实体)在持久性存储。

一个实体不应该呼叫数据访问层直接。但是,业务层会,在某种程度上负荷和持续存在的实体的领域模型。

如果你的地图,以Java EE技术通常是这样的:

  • 实体-->只有休眠/访问用户的注释。注意,注释并不意味着一种紧密结合与访问用户/休眠,同样只可以用别的地方没有休眠状态。
  • 业务层-->届会议EJB或弹簧
  • 数据存取层-->访问用户/休眠

这是一个粗略的草图,并有很多可能的变型。你可以显着的是跳过本届会议EJB和实施业务层的另一种方式。你也可以决定有业务层叫访问用户/休眠届会议/。直接的,在这种情况下访问用户/休眠是真的DAL,或者你可以想到包裹入本届会议/。成所谓的数据访问对象(DAO)。

关于非常,试图坚持什么是便携式的,并且如果使用当地SQL,按照SQL-92公约。如果东西得复杂,也许引入Dao.这样,你知道,只有地方有非常的查询是在Dao.你还可以首先落实的查询逻辑"程序"在道,如果你有性能的问题,重新实现它具有更复杂的非常查询。

编辑

关于您的问题的评论:

业务层取决于数据层。如果你想要业务层不要取决于休眠/访问用户那么你的数据层的需要 抽象 休眠/访问用户的距离。如果您使用的道你的数据层,这将是这种情况。道将是"薄手写的持久层在休眠"(把你的话)。我会介绍岛的所有实体在你的情况。

什么你都要求是一个漂亮的通用设计问题。我不能给出一个明确的配方,也不可能是汇总所有变异体中的一种答案,因为它取决于案例的情况。例如,我们没有发言迄今为止有关问题的交易,你通常开始在业务层,但是,数据层必须知道的。这一般取决于使用的技术和您的要求。

仍然,这是一个列表中的资源可能感兴趣的是:书籍 模式的企业应用程序结构, 该书 现实世界Java EE模式的重新思考最佳做法, 该书 领域驱动的设计 更具体模式 数据访问的对象, 储存库的图案, 公开会议中看 (如果它是一个网络应用程序),也许 贫血的领域模型.

编辑2

Ok,多了一些句子有关的交易:

交易应该在概念上加以管理在业务层;该定义需要做什么在一个单元的工作是一致的,取决确实在很逻辑的应用程序。

与EJB3,交易可以被宣布注释和应用程序。服务器管理,用于你。看看 这种其他的答案 我的更多信息。用弹簧还可以标记的交易的声明,但我不知道的细节。否则你将需要启动/停止的交易自己。这将稍稍不同的你是否使用JDBC交易或JTA交易。

交易也涉及懒载于休眠/。一个实体,是懒人装载的,确实可以装载的,如果只有一个当前事务。如果交易终止在业务层、实体返回到演讲层需要急切地加载。

为了解决这个问题,一个受欢迎的模式网络应用程序是 公开会议中看, 我已经提到的。在这种情况下,介绍层启动/停止的交易(其是轻微错误的概念上的),但是工作只是现延迟装载。

其他提示

你域模型及其持久层应该在理论上是独立的-有没有必要为一类称为 Entity 知道任何关于如果它是如何持续存在,所以你可以用的东西喜欢休眠创建持久层没有污染的领域模型类本身。你不"代码的[...]的模式对这个层"-你码模型,然后地图到一个持久性存储某种形式的奥姆层,那里的领域模型并不取决于奥姆层。显然,持久层将取决于该领域的模式,但这很好。

我个人的战斗害羞的使用太多的非常与(N)冬眠的原因你要求,但有时这是不可避免的。你已经知道,拥有自己的突出显示,主要问题有,所以你不可能过度使用这无论如何。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top