情况:我有一个使用JavaFX编码的MVC应用程序 我有另一个编码数据访问层的应用程序 基本上,我需要从MVC应用程序访问DAL以显示数据。
目标:我希望拥有一个独立于“View”项目的数据访问层。即,我希望能够使用相同的DAL在GUI上显示数据,就像在JSP上一样(例如)。
问题:如果这两个应用都与包在同一个应用中,我就可以在DAL中使用模型类来填充数据库中的对象列表。
然而,由于我有两个不同的应用程序(假设DAL已经存在,由另一个团队编码),我无法在DAL中引用模型类,因为我已经在MVC项目中引用了DAL项目(这会导致循环参考)。
简而言之,引用如下: DAL => MVC
但我需要使用DAL中的Model来填充数据库请求中的类。
考虑的解决方案: 我想过使用 DAO设计模式,但不应该在DAL项目中,而不是在MVC项目中?哪个做法没有真正解决问题。
我觉得需要有特定的业务类,然后应该转换为MVC项目中的模型类(听起来有点不稳定和冗余恕我直言)
PS:来自JavaFX的模型层正在约束(使用像StringPropery,IntegerProperty这样的字段),所以我将它隔离为一个独立项目(也许只是一个选项......)
答案 0 :(得分:1)
我会这样。在DAL项目中创建一个哑DTO层,让你的DAL项目从数据库中获取数据,填充DTP并返回DTO。 MVC项目仍然可以将DAL项目作为您的依赖项。
在MVC Service类中,调用DAL代码,获取DTO对象并映射到JavaFX Model对象。通过这样做,任何使用DAL项目的应用程序都会获得统一的DTO作为响应,并且消费者可以根据需要将其映射到他们自己的模型。
注意:通常情况下,在Spring世界中,模型对于getter和setter非常愚蠢,我会让它们成为DAL项目本身的一部分。我想把它们移到DAL本身。由于模型对象特定于JavaFX,我不会想到将它们移动到DAL。
希望它有所帮助。