我可以避免重复我的业务层吗?(.NET)
我有一个技术演示应用程序要编写,有多个客户端:web客户端(ASP MVC 3)、桌面客户端(目前它将是一个WCF应用程序,计划稍后添加到Metro)和一个移动客户端(Wp7是默认任务,但如果我觉得自己是一个时代百万富翁,我也可以尝试MonoDroid) 我在考虑为客户使用WCF。我可以避免重复我的业务层吗?(.NET),.net,wcf,asp.net-mvc-3,validation,client-server,.net,Wcf,Asp.net Mvc 3,Validation,Client Server,我有一个技术演示应用程序要编写,有多个客户端:web客户端(ASP MVC 3)、桌面客户端(目前它将是一个WCF应用程序,计划稍后添加到Metro)和一个移动客户端(Wp7是默认任务,但如果我觉得自己是一个时代百万富翁,我也可以尝试MonoDroid) 我在考虑为客户使用WCF。 我在考虑首先在后端使用EF模型。 然而,当我试图找出我的域逻辑(验证、计算属性等)应该放在哪里,而不必手动复制我在EF模型中已经声明的所有内容时,我的问题就出现了 我的第一个主要问题是EF内置了一个很好的对象跟踪功能
我在考虑首先在后端使用EF模型。
然而,当我试图找出我的域逻辑(验证、计算属性等)应该放在哪里,而不必手动复制我在EF模型中已经声明的所有内容时,我的问题就出现了 我的第一个主要问题是EF内置了一个很好的对象跟踪功能(
obj.Components.Add(…);db.Save();
),但这项功能在客户端并不容易使用。有没有一种方法可以绕过它而不必实现我自己的方法?(我知道怎么做,但这对于这个演示来说太多了)
我的第二个主要问题(如标题所示)是域逻辑,主要是验证
- 我是否应该将业务对象重新编译到客户端,并将wcf序列化到相同的对象中李>
- 我应该尝试在客户端使用WCF生成的类吗?(回到第一个问题)
- 我应该尝试使用共享程序集吗
- 如果我将逻辑写入MVC控制器,我的WCF服务将无法灵活地调用它们
- 如果我编写一个单独的BusinessLayer,它应该也使用EF实体,还是应该编写自定义业务对象?(基本上是重复一切)
- 如果我使用EF实体,我必须对其进行部分验证,这很难看(在这一点上,我应该先切换到EF代码吗?)
- 有没有一种好方法可以在客户端使用这些相同的验证
- 我应该放弃这一切,尝试RIA服务吗
哦,这么多问题…我以前在Windows上构建过跨平台应用程序(特别是WPF/Silverlight客户端、C#SQL Server后端),我所做的就是这样
- 采用了消息层或中间件(RabbitMQ用于异步消息传递,或webservices用于请求/响应)和序列化技术(Protobuffers或JSON),可跨所有三个边界工作。尽可能使用跨平台中间件。这就是我提到RabbitMQ/protobuffers/JSON的原因李>
- 将所有业务逻辑移动到服务器-客户端根本无法访问数据库,必须通过中间件。客户端,包括桌面,实际上就像瘦浏览器一样访问所有操作的中间件服务
- 创建共享程序集以保存客户端和服务器之间的消息、数据协定和公共类,所有客户端和服务器都可以引用这些类李>
最好的建议是,我将使用普通的.net对象作为域,然后首先使用NHibernate或EF代码添加持久性。@CodeInChaos:这也是我的同事给我的建议:)我将研究中间件层的附加好处。我相信重新编译的数据对象和JSON序列化,以及EF代码首先,我想我会成功的。SWCF本质上是中间件。无论哪种方式,通过抽象web服务背后的功能,客户机保持精简,客户机技术可以更容易地重新设计“创建一个完全兼容C#的项目(因此可以在WPF桌面或服务器上工作)和每个web客户机的其他项目(Silverlight,WP7)”-您看到PortableLibrary的工作了吗?()@MattDavey,你好,不,我没有。谢谢分享链接。我在跨平台WPF/Sl方面做了很多工作,所以在这方面有任何帮助都是好的!!