我有一个技术演示应用程序要编写,有多个客户端: Web客户端(ASP MVC 3),桌面客户端(目前它将是一个WCF应用程序,计划稍后将其调到Metro以及移动客户端(Wp7是默认任务,但如果我觉得自己是时间百万富翁,我也可以尝试使用MonoDroid)
我在考虑为客户使用WCF 我在考虑使用EF Model First作为后端 然而,当我试图弄清楚我在哪里放置我的域逻辑(验证,计算属性等)而不必手动复制我已在EF模型中声明的所有内容时,我的问题就出现了。
我的第一个主要问题是EF内置了一个很好的对象跟踪(obj.Components.Add(...); db.Save();
),但是这个功能在客户端很容易找到。有没有办法绕过它而不必实现我自己的? (我知道怎么做,但这对于这个演示来说太多了)
我的第二个主要问题(正如标题所示)是域逻辑,主要是验证。
我应该尝试使用共享程序集吗?
如果我将我的逻辑写入MVC控制器,我的WCF服务将无法整齐地调用它们。
在客户端使用这些相同的验证有一个很好的方法吗?
我应该废弃整件事并尝试RIA服务吗?
哦,这么多问题......
答案 0 :(得分:3)
我之前在Windows上构建了跨平台应用程序(特别是WPF / Silverlight客户端,C#SQL Server后端),我所做的就是这个。
最后一步(共享程序集)涉及创建一个完全C#兼容的项目(因此适用于WPF桌面或服务器)以及每个Web客户端的其他项目(Silverlight,WP7)。要在多个客户端上双重部署代码,您在桌面组件中拥有一个源副本,然后将“添加为链接”相同的源文件复制到Silverlight / WP7程序集。您将不得不拥有一些#if预处理器语句,但总的来说,可以使用此方法双重部署大块代码。
您的筹码变为
客户:
所有客户端都有序列化,Web服务/中间件和MVVM / MVC模式的客户端实现
服务器/ wpf桌面上的中间件实现可以是相同的。 Wp7和monodroid等需要不同中间件:
消息/ DataContracts:
使用上面概述的技术在所有客户端/服务器上共享
服务器:
所有业务逻辑,数据库访问和服务器端中间件实现。对于DB Access,我使用PetaPoco作为优秀的MicroORM。我相信microORM实现能够支持堆栈溢出,但我可能会错。
我还要看一下this article的灵感。有可能 - 我用SL / WPF客户端和C#服务器编写了客户端/服务器应用程序,也使用上述方法编写了WPF客户端/ Java服务器。
致以最诚挚的问候,