Subsonic 亚音速:把我带到第三层

Subsonic 亚音速:把我带到第三层,subsonic,n-tier-architecture,Subsonic,N Tier Architecture,这是一个令人尴尬的基本n层问题 我在VS2008中创建了一个带有亚音速的DAL项目。它有一个小部件类、一个widgetcollection类和一个widgetcontroller类 我已经创建了引用它的业务逻辑项目(不,我不能将它放在同一层)。使用某些业务标准,它在返回widgetcollection的函数中选择一个小部件集合 我的问题是:我的GUI层如何将集合绑定到网格?我知道widgetcollection是datagrid的有效数据源,但是GUI层如何知道小部件和widgetcollect

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

我在VS2008中创建了一个带有亚音速的DAL项目。它有一个小部件类、一个widgetcollection类和一个widgetcontroller类

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

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

(使用亚音速2.x)在我的BLL类中,我有一个属性,它提供了对相关DAL类的对象引用。我的UI表单有一个对BLL类的引用,因此从表单中我可以通过.BLL.DAL.xxxx处理DAL属性和方法


FWIW,我从未成功地将亚音速集合绑定到DataGridView。作为替代方法,我有时使用collections.ToTable()方法创建一个DataTable,然后绑定到该DataTable,或者使用.AddRow()手动绑定。查看MSDN中IBindingList接口的文档,它有一个非常好的示例。
例如,在模型中创建一个CustomerList类,该类使用BLL中的Customer类。将网格绑定到CustomerList类的实例。表示层不了解亚音速表类。

您可能需要使用接口。您可以基于Dal中的小部件轻松创建接口(右键单击该类并从该类创建接口)。接下来,获取接口并将其添加到您的业务逻辑层或仅用于接口的单独项目中。完成后,可以在DAL和GUI中添加对接口的引用。如果您曾经将数据存储从数据库更改为XML等,这也会有所帮助。

首先,我不认为这是一个令人尴尬的基本n层问题。 这是一个非常有趣的话题,我试图在旧的亚音速论坛上激发讨论

我和你一样不愿意向DAL公开我的GUI层

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

我的BLL只与映射层对话,映射层将获取、保存等映射到适当的DAL CRUD方法,并将返回的亚音速类型转换为我的实体类型

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

例如,找到一种灵活、通用的方法来向BLL指示我希望在获取中返回的行,这是一个我没有预料到的挑战,我用fluent界面编写了一个通用queryClass,它看起来很像亚音速选择

FWIW,我认为您正朝着正确的方向前进,我想您需要做的是决定如何在GUI中定义这些亚音速类型


Rob有一个你可能感兴趣的主题。

我帮不了你解决问题,但我喜欢这个主题!看到这个我差点哭了…:(如果按照:添加INotifyPropertyChanged处理程序,则当网格中的单元格发生更改时(列表触发property changed事件),只需在网格的基础连接上调用SaveAll()。