在WCF服务中公开DataAccessLayer

时间:2013-09-03 09:06:29

标签: c# wpf wcf nhibernate ninject

我已经为第三方库构建了一个用于CRUD操作的N层应用程序。 这是我的应用程序设计包装:

列出项目

  • 核心 - 使用域模型和实体。
  • DataAccessLayer - 使用第三方库NHibernate和IOC容器Ninject
  • Ui - Wpf app或Asp.net MVC app

现在我想将UI与DAL分开,通过WCF Tcp服务公开我的CRUD存储库。 这个选择是为客户端 - 服务器设计做的:

  • 服务器:WCF - >使用所有第三方软件进行数据库连接的DAL(许多驱动程序非常庞大,并且在100多个客户端中安装成本很高)。
  • 客户端:我的WPF或SilverLight用户界面。

我已经建立了MVC和WebForms APP,很多人认为这是一个更好的解决方案!

但是对于wpf,我有很多可能使用图形和开发对我来说更快。

我的所有存储库都扩展了一个接口(使用Ninject进行依赖注入),我希望将其添加到我的WCF服务中而不创建其他接口。很多我的repo函数返回NHibernate对象列表,如何将属性“DataMember”添加到非WCF项目中?

但我的简单问题是,“做这件事最好的方法是什么,保持良好的设计?” 感谢您的耐心等待!

1 个答案:

答案 0 :(得分:0)

理想情况下,您希望WCF服务中的所有业务逻辑尽可能使用UI。这样你就可以创建任意数量的用户界面(WPF,Silverlight,MVC,甚至是iPhone),并且它们都很简单,并且具有WCF中的所有通用逻辑。

您需要尽可能保持松散耦合,因此您不希望将数据库内容传递到前端。相反,您希望将POCO或DTO发送到足以完成工作的前端。避免将整个数据库项发送到前端,因为理想情况下,您的前端应该不知道正在使用的数据库或结构如何。

就你的UI而言,只关注WCF合同和DTO等.WCF应该分成几个不同的层(或层),这取决于你的方法,但你可以有门面,业务逻辑,数据访问图层(做一些最适合您情况的研究)。您可能希望使用存储库模式等,但这将在WCF服务中,并且UI将不知道此“黑匣子”中发生的情况。

最终你想要的是所有的组件与最少量的“耦合”组合在一起,你应该能够将一个组件换成另一个组件,而没有其他任何“依赖”并且断开。

这是一个 DEEP 主题,我已经触及了表面,但希望能让你的想法走上正轨!