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