我在C#Azure移动服务服务器和客户端之间共享数据传输对象。我在两个应用程序中使用相同的类。
Azure移动服务使用的TableController类要求DTO继承“实体数据”,然后实现接口“ITableData”。
ITable数据生命是参考的一部分:
Microsoft.WindowsAzure.Mobile.Service.Tables
如果没有在nuget中安装整个服务器端移动服务包,我还没想出如何包含该引用:
WindowsAzureMobileServices.Backend
包括OWIN以及客户端不需要的许多其他引用。这就是我目前正在做的事情。这适用于我目前正在处理的桌面应用程序,但我认为它不适用于通用应用程序和Windows手机应用程序。
我还查看了microsoft的移动服务示例,并在那里使用单独的类作为服务器和客户端的DTOS。
我们是否必须两次编写相同的代码?
答案 0 :(得分:2)
不,但您可以更好地利用共享项目和部分类。 您的共享项目将具有实体的公共属性。 其他项目将引用此共享项,并可以向共享实体添加一些其他属性,仍使用部分类。
我对AMS有精确的经验,所以我知道你的意思。 根据我的经验,对于客户端和服务器具有完全相同的实体类,无论如何都是不现实的。 例如,在所谓的可移植类库中,您可以拥有一小部分框架和可用的引用。 除了属性之外,通常将属性放在POCO类文件中。在客户端上,您可能有一些对服务器不可用/有意义的属性(例如SQLite属性),或者反之亦然。您可能会因为我建议的共享项目方法而陷入这种情况,但可以使用所谓的预处理程序指令进行管理。