Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有一种可接受的方法将这些层/依赖项分开?_Java_Architecture_Dependency Injection_Inversion Of Control_Jdo - Fatal编程技术网

Java 是否有一种可接受的方法将这些层/依赖项分开?

Java 是否有一种可接受的方法将这些层/依赖项分开?,java,architecture,dependency-injection,inversion-of-control,jdo,Java,Architecture,Dependency Injection,Inversion Of Control,Jdo,我目前正在挣扎,我是否已经达到了一个良好的分离水平,或者我是否在某个地方错过了要点,因为我对学习发展的纪律方面相对较新 我开始时的目标是创建一个对任何持久性机制都不可知的层——我称之为数据api。然后,我使用JDO实现了这些接口,并将此项目数据称为JDO。理想情况下,逻辑层只知道数据api 在这一点上,我不确定什么是合理的。必须以某种方式调用业务逻辑层,对吗?那么,是否期望调用方提供数据api的实现(数据jdo,或其他依赖于实验的东西)呢 因此,我们的目标可能是(主要是为了经验,而不是为了生产力

我目前正在挣扎,我是否已经达到了一个良好的分离水平,或者我是否在某个地方错过了要点,因为我对学习发展的纪律方面相对较新

我开始时的目标是创建一个对任何持久性机制都不可知的层——我称之为数据api。然后,我使用JDO实现了这些接口,并将此项目数据称为JDO。理想情况下,逻辑层只知道数据api

在这一点上,我不确定什么是合理的。必须以某种方式调用业务逻辑层,对吗?那么,是否期望调用方提供数据api的实现(数据jdo,或其他依赖于实验的东西)呢

因此,我们的目标可能是(主要是为了经验,而不是为了生产力)实现一个可以替代数据jdo的数据jpa包。因此,最顶层(web服务、作为工具一部分的通用主方法、单元测试等等)是决定使用哪个实现的层

我应该使用像Spring这样的框架,通过XML选择使用哪个数据api实现吗


抱歉,如果这有点模糊。。。我想根本的问题是,API的使用者在什么时候依赖、提供或与该API的实现配对?如果答案是或应该是“从不”,那么如何确保所有内容在运行时都可用,消费者如何获得“API”仅使用接口描述的任何内容的实例?

我来自.net背景,而不是Java背景,因此我恐怕无法帮助您了解Java细节

必须以某种方式调用业务逻辑层,对吗?那么,是否期望调用方提供数据api的实现(数据jdo,或其他依赖于实验的东西)呢

对。在.Net世界中,我使用一个工厂(如在的实例中)动态返回数据提供程序实现(要使用的实现之一由配置设置)。数据提供者由工厂作为“对象”返回,由调用的业务逻辑代码将其转换为正确的类型——正如业务逻辑所针对的接口所指定的那样

我在for.Net上写了一篇egot(另一篇!)文章,这可能有助于解释其中的一些问题,但我确信在某些地方有一些很好的基于java的问题

我应该使用像Spring这样的框架,通过XML选择使用哪个数据api实现吗

可能吧。我想说的是,先花时间掌握概念,然后再考虑“最佳实践”。仅供参考,我通过自己编写所有代码的方式艰难地学习了AJAX。这些天来,我一直在寻找一个好的框架,但我只认为,在对采煤工作面进行了一些硬嫁接之后,我才有信心做到这一点:)

。。。如果答案是或应该是“永不”,那么


是的-这是永远不会。使用工厂。

您的数据api是DAO接口层,这是您的业务(也称为服务)层应该知道的关于持久性的所有内容。而表示层或业务层之上的任何其他层都不应该对下面的DAO层有任何“知识”

要实现这一点,依赖Spring这样的框架是一个好主意。顶层加载一个应用程序上下文,其中包含框架加载适当实现所需的所有信息

例如,您可以从前端加载applicationContext.xml以使用数据jdo,从单元测试加载testApplicationContext.xml以使用数据jpa