我认为最好开始描述我正在做的事情,并在最后将其汇总起来解决大问题:
我正在使用 Google 的 GWT 构建一个网络应用程序,并封装某些代码以便在我开发移动客户端时可重用。到目前为止,我有以下项目:
app.core - 其中包含所有数据对象(POJO),例如 BasketItem、UserAddress 等
app.dao - 数据访问。这引用了上面的项目,并具有像 ItemDAO 这样的类,它负责与项目相关的持久化,例如void persistItem(BasketItem item, User user)
app.webapp - GWT Web 应用程序。这包含了上面的2个类。我在客户端/服务器之间使用 GWT-RPC,服务器方法调用 DAO 来保存/检索/任何数据 app.server - 一个 RESTful 服务器应用程序,它也使用 DAO,它将提供基于 REST 的接口(interface),用于对移动/其他客户端执行相同的数据操作
问题:如果 GWT 实现了 GWT IsSerialized,那么 GWT 最适合在客户端/服务器之间传递数据对象(事实上,当我使用 Serialized 时,我会遇到问题)。但是,我不想将 GWT 相关的 jar 添加到 app.core 项目中,也不希望 app.dao 等依赖于 IsSerializable。我怎样才能最好地封装整个应用程序中的 dto,同时仍然使用 IsSerialized,因为它在 GWT 中效果最好。我应该继续扩展 app.webapp 中的核心对象并实现 IsSerializable 吗?
你会怎么做?
最佳答案
我决定完全将 GWT 排除在我的服务器代码之外。实际上,您提到了原因 - 您正在谈论实现 GWT-RPC 接口(interface),然后实现相同功能的 REST 接口(interface)。我决定只创建一个 REST 接口(interface),避开 GWT-RPC 和 RequestFactory,并使用 POJ-DTO。 GWT 的 AutoBean 和 RequestBuilder 在 Json 和 Java 之间移动方面做得非常好。我认为,避免客户端和服务器之间的直接连接(除非通过 POJO DTO)更简单、更干净。当我想调整操作的一个小方面或添加缓存或其他东西以便能够直接执行操作时,这也很好。
另外,我的 API 的外部文档基本上只是我内部访问器方法的 javadoc!
关于java - 架构/最佳实践 - GWT Web 应用程序中用于 dtos 的最佳方法/模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315975/