Let*_*man 2 c# architecture wcf
我刚开始学习WCF,而且我来自一个完全非网络背景.
我已经构建了一个3层桌面应用程序,它编译成一个本地运行的exe.
现在我想将整个业务逻辑层移动到中心服务器,并使GUI成为客户端应用程序.
据我所知,WCF应该是我的解决方案,事实上,它帮助我实现了我想要的目标.
我管理远程功能,这是我需要的基础.
我现在的问题是,我不太了解架构.
例如,我的一个服务从我的Business Logics层返回数据类型(类).
此类通过WCF机制自动变为可供客户端使用.
但问题是,这个类包含一些方法,我绝对不希望暴露给客户端.
例如Save方法(保存到db).
此外,有时我甚至不想让客户端更改类的所有属性,因为这个类可能会被发送到我的一个服务.
我不想重新验证服务中的类实例.
我该怎么办?我应该构建另一个层,即我向客户端公开的Business Logics的受限版本吗?或者有没有办法只将部分类暴露给客户端,而不是自己限制服务器?
我知道这是一个基本问题,但说实话,我在搜索之前已经搜索了很多.我的问题是我不太清楚要搜索什么.
那么我的第二个问题是,你对任何可以解释我这个架构的资源有什么建议吗?
通常,如果要封装业务层,则不希望直接公开业务对象.这是因为您现在拥有一个解耦的客户端,并且您不一定希望每次业务逻辑/属性更改时都必须更新客户端.
这就是数据传输对象(DTO)很好地发挥作用的地方.通常,您希望控制您公开的合同(数据和方法).因此,您将明确地制作构成传输层的其他对象(DTO).然后,您可以安全地独立更改客户端和服务器代码(只要两者仍然满足合同对象).
这通常需要更多的映射(在你发送或接收之前),但它通常是值得的.
对于WCF,标记的接口和类以及标记[ServiceContract]的类[DataContract]通常构成此传输层.