0

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

项目清单

  • 核心- 具有域模型和实体。
  • DataAccessLayer - 带有第 3 方库 NHibernate 和 IOC 容器 Ninject
  • Ui - Wpf 应用程序或 Asp.net MVC 应用程序

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

  • 服务器:WCF -> DAL 以及用于数据库连接的所有 3rd 方软件(很多驱动程序非常大且安装在 100 多个客户端中非常昂贵)。
  • 客户端:我的 WPF 或 SilverLight UI。

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

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

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

但我的简单问题是,“保持良好设计的最佳方法是什么?” 谢谢耐心!

4

1 回答 1

0

理想情况下,您希望 WCF 服务中的所有业务逻辑与 UI 尽可能地笨拙。通过这种方式,您可以创建任意数量的用户界面(WPF、Silverlight、MVC、iPhone 甚至),并且它们都小而简单,具有 WCF 中的所有常见逻辑。

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

就您的 UI 而言,只有 WCF 合同和 DTO 等很重要。WCF 应该分为几个不同的层(或层),这取决于您的方法,但您可以有外观、业务逻辑、数据访问层(对最适合您的情况进行一些研究)。您可能想要使用存储库模式等,但这将在 WCF 服务中,并且 UI 将不知道此“黑匣子”中发生了什么。

最终,您想要的是让所有组件以最少的“耦合”装配在一起,您应该能够将一个组件换成另一个组件,而不会让其他所有组件“依赖”它并破坏。

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

于 2013-09-03T09:24:07.810 回答