防止WCF暴露我的全班?

Let*_*man 2 c# architecture wcf

我刚开始学习WCF,而且我来自一个完全非网络背景.

我已经构建了一个3层桌面应用程序,它编译成一个本地运行的exe.

现在我想将整个业务逻辑层移动到中心服务器,并使GUI成为客户端应用程序.

据我所知,WCF应该是我的解决方案,事实上,它帮助我实现了我想要的目标.

我管理远程功能,这是我需要的基础.

我现在的问题是,我不太了解架构.

例如,我的一个服务从我的Business Logics层返回数据类型(类).

此类通过WCF机制自动变为可供客户端使用.

但问题是,这个类包含一些方法,我绝对不希望暴露给客户端.

例如Save方法(保存到db).

此外,有时我甚至不想让客户端更改类的所有属性,因为这个类可能会被发送到我的一个服务.

我不想重新验证服务中的类实例.

我该怎么办?我应该构建另一个层,即我向客户端公开的Business Logics的受限版本吗?或者有没有办法只将部分类暴露给客户端,而不是自己限制服务器?

我知道这是一个基本问题,但说实话,我在搜索之前已经搜索了很多.我的问题是我不太清楚要搜索什么.

那么我的第二个问题是,你对任何可以解释我这个架构的资源有什么建议吗?

Dav*_*yon 8

通常,如果要封装业务层,则不希望直接公开业务对象.这是因为您现在拥有一个解耦的客户端,并且您不一定希望每次业务逻辑/属性更改时都必须更新客户端.

这就是数据传输对象(DTO)很好地发挥作用的地方.通常,您希望控制您公开的合同(数据和方法).因此,您将明确地制作构成传输层的其他对象(DTO).然后,您可以安全地独立更改客户端和服务器代码(只要两者仍然满足合同对象).

这通常需要更多的映射(在你发送或接收之前),但它通常是值得的.

对于WCF,标记的接口和类以及标记[ServiceContract]的类[DataContract]通常构成此传输层.