为 Java 和 .NET 实现单个数据访问层
Posted
技术标签:
【中文标题】为 Java 和 .NET 实现单个数据访问层【英文标题】:Implementing a single Data Access Layer for Java and .NET 【发布时间】:2011-09-04 06:06:20 【问题描述】:我有使用 Java、.NET 和 C++ 编写的应用程序。他们都使用一个通用的数据库。
每个应用程序都有自己的数据库访问方式,因此情况非常不一致。
我正在考虑使用 ORM 编写数据访问层并让所有应用程序都使用它。
问题是如何实现这个ORM数据访问层:
使用 Hibernate 制作 Java 包; 使用 .NET 和 C++ 应用程序中的 Java 包
使用 Entity Framework 创建 .NET 类库;使用 Java 应用程序中的类库
无论哪种情况,从其他平台访问包/类库是否容易?有什么建议吗?
两个平台之间通过 XML 进行通信是最好的方式吗?
附言。我已经看过this question,但我认为我的问题是那个问题的超集。
附言。制作网络服务是一种选择,但我不希望编写/使用网络服务。
【问题讨论】:
【参考方案1】:iKVM
这将允许您在 .NET 和 Java 之间共享代码。我喜欢世界上大多数理智的人更喜欢在 .NET 中编写数据访问位,但是如果您已经有 Java 中的现有代码,您希望将其提供给 .NET 服务,这是可用的
http://www.ikvm.net/
RESTful Web 服务++
这是最理智的,显然也是最快的启动和运行方式。同样,您可以使用 Jersey、ASP.NET MVC、NancyFx 或任何您想要启动和运行的 REST 应用程序服务器。
我建议您使用 NancyFx 和 ServiceStack.Text。这是两个非常简单非常纯粹的实现,并且速度非常非常,如果您将它用作数据库之上的统一 DAL,这就是您想要的。
南希:https://github.com/NancyFx/Nancy/
ServiceStack.Text:https://github.com/ServiceStack/ServiceStack.Text
球衣:http://jersey.java.net/
ZOMG T3h H0rror - COM+ / DCOM
如果您不能使用 RESTful Web 服务,并且假设您只使用 Windows,这实际上是一种可行的可能性。这也将是最麻烦的,具体取决于您的要求有多疯狂。话虽如此,我之前已经看到过这样做,并且看到它工作得很好,尤其是当您的基础架构中有旧的 C/C++ 组件位于不同的段中时。
【讨论】:
谢谢。为什么在 .NET 和 Java 中编写数据访问位是明智的? 我发现,通过 linq、自动属性、流畅的 nhibernate / dapper、扩展方法等,您可以比强制尝试绕过 Java 晦涩的语法更快地启动和运行。 但是如果您要公开统一的 SOAP 服务,那么 Java 仍然是您的最佳选择。【参考方案2】:两个平台之间通过 XML 进行通信是最好的方式吗?
这会带来性能问题 - 但会以独立于语言的方式提供统一的数据层。你可以考虑开源WSO2 Data Services Server,如果你选择继续使用这种方法...
谢谢...
【讨论】:
【参考方案3】:这听起来有点像可以将数据库视为您的各种应用在不同程度上使用的服务。
如何编写一个 Web 服务层来包装对数据库的所有访问操作和服务启用?您可以在该层中使用 ORM,并让您的所有应用程序与 Web 服务包装器交互。如果您可以将它部署在与数据库相同的服务器上,您将不会获得太多额外的网络开销。
我认为这将是一种不错的跨平台方法,您不必依赖跨平台边界的库,并且您为所有当前/未来的应用程序提供了与数据库对话的标准方式。
【讨论】:
我已经回复了你的评论,但你把它变成了答案。我更新了我的问题,因为我想避免编写/使用网络服务以上是关于为 Java 和 .NET 实现单个数据访问层的主要内容,如果未能解决你的问题,请参考以下文章