亚音速:把我带到层级

标签 subsonic n-tier-architecture

这是一个令人尴尬的基本 n 层问题。

我在 VS2008 中使用亚音速创建了一个 DAL 项目。它有一个小部件类、一个小部件集合类和一个小部件 Controller 类。

我创建了引用它的业务逻辑项目(不,我不能把它放在同一层)。使用某些业务标准,它在返回小部件集合的函数中选择小部件集合。

我的问题是:我的 GUI 层如何将集合绑定(bind)到网格?我知道小部件集合是数据网格的有效数据源,但是 GUI 层如何知道小部件和小部件集合是什么 ?当然,我不必从 GUI 中引用 DAL,这否定了整个观点。

最佳答案

首先,我不认为这是一个令人尴尬的基本 n 层问题。
这是一个非常有趣的主题,我试图在旧的 Subsonic 论坛中引发讨论。

我和你一样不愿意将我的 GUI 层暴露给 DAL。

我的 GUI 层只使用我自己的实体模型的词汇和主题与 BLL 对话,并且只返回我自己的实体或列表,或者在某些情况下返回数据表。

我的 BLL 只与一个映射层对话,该层将 Fetches、Saves 等映射到适当的 DAL CRUD 方法,并将返回的 Subsonic 类型转换为我的实体类型。

在这样做的过程中,我对我必须复制多少 Subsonic 感到惊讶,有时我觉得我走错了路,我现在感觉更舒服了,尽管它仍然需要重构和改进。

例如,找到一种灵活、通用的方法来向我的 BLL 指示我希望在 fetch 中返回哪些行是一个我没有预料到的挑战,我完成了一个具有流畅接口(interface)的通用 queryClass,它看起来很像亚音速选择。

FWIW,我认为您正朝着正确的方向前进,我想您要做的就是决定如何将这些 Subsonic 类型定义到您的 GUI。

Rob 有一个 interesting discussion你可能会感兴趣。

关于亚音速:把我带到层级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/999511/

相关文章:

c# - Lambda 包含在 SimpleRepository.Find 中

c# - 派生类的一般约束

wcf - 更改每个 WCF 方法或调用的超时时间

asp.net-mvc - 如何在数据层或类中使用RavenDB查询?

asp.net-mvc - ASP.Net MVC 和 N 层

asp.net - 我应该在 N 层应用程序中的什么地方实现电子邮件逻辑?

stored-procedures - 亚音速和存储过程

c# - Subsonic 3 - 隐藏命名空间 - 可能是我

c# - Entity Framework - n 层 - 多对多 - 如何获取列表 "where"

subsonic - SimpleRepository 的生命周期管理