C# 从UI层分离数据?

C# 从UI层分离数据?,c#,winforms,design-patterns,.net-4.0,data-access-layer,C#,Winforms,Design Patterns,.net 4.0,Data Access Layer,我想将数据层与UI层完全分离。这里是我的示例,我有一些客户需要相同报告的不同数据,我不希望UI接触数据层,因此我假设我需要数据层和UI之间的一些“东西”。基本上,UI会调用某个“东西”,该“东西”会调用数据层,然后数据层会根据用户检索数据并将其传递回“东西”,而“东西”会将数据传递回UI 我不知道这个“东西”应该是什么 我听过一些术语,比如使用对象映射器传递的模型,但不确定这些术语是否相关。您要寻找的模式是MVC-模型控制器视图。你需要的是控制器。通常代码是这样组织的 调用控制器以获取报告 i

我想将
数据层
UI层
完全分离。这里是我的示例,我有一些客户需要相同报告的不同数据,我不希望
UI
接触
数据层
,因此我假设我需要
数据层
UI
之间的一些“东西”。基本上,
UI
会调用某个“东西”,该“东西”会调用
数据层
,然后
数据层
会根据用户检索数据并将其传递回“东西”,而“东西”会将数据传递回
UI

我不知道这个“东西”应该是什么


我听过一些术语,比如使用对象映射器传递的模型,但不确定这些术语是否相关。

您要寻找的模式是MVC-模型控制器视图。你需要的是控制器。通常代码是这样组织的

  • 调用控制器以获取报告
  • is访问数据层(或模型)并获取填充有数据的对象(可以是强类型对象,也可以只是映射)
  • 控制器调用视图,将数据对象传递给它并获取渲染结果
  • 控制器将渲染结果返回给客户端
这应该足以让你开始


您谈论的是一种常见的体系结构:UI-->业务逻辑层(BLL)-->数据访问层(DLL)。现在,BLL和DAL可以包含在您的.exe中(您用WinForms标记了您的问题),也可以是服务层/层的一部分,这是非常常见的

通常,最好有定义每个层(BLL和DLL)的接口。这将允许您在不影响其使用者(通常)的情况下更改层的实现,使您能够分离关注点,并方便测试


BLL将包含您的逻辑,DAL将管理您的数据源。您提到一个模型,它通常指DAL通过BLL返回的对象。可以将其视为您的个人模型或订单模型。由于您的标记是Winforms,您可能需要研究MVP模式。

您所描述的通常称为“业务逻辑”layer@paul-我了解这一部分,但使用我的场景的最佳方法是什么?这是否适用于MVVM模型,如果适用,如何适用?它可以,但一般来说,我的项目中的BLL和DLL位于服务/存储库层。我认为您希望避免ViewModel(或MVP中的演示者)成为文件背后的代理代码。在MVVM中,我将我的ViewModels调用到存储库或服务层,然后再调用DAL。您能解释一下存储库或服务层是什么吗?从客户端,使用它们调用web服务或BLL。通常,您希望您的ViewModel/Presenter/Controller将请求传递给其中一个—这更像是SRP/关注点分离的内容。这些将调用获取数据等。这是否适用于MVVM模型,如果适用,如何应用?在MVVM中,控制器被替换为“视图模型”层,该层将数据从模型转换为视图理解的格式。我记得MVVM使用事件而不是直接方法调用,因此视图模型层只公开(或使用)事件,只知道事件签名,而不是将控制器绑定到视图和模型