这是一个令人尴尬的基本n层问题。
我在VS2008中用亚音速创建了一个DAL项目。它有一个widget类,一个widgetcollection类和一个widgetcontroller类。
我已经创建了引用它的业务逻辑项目(我不能把它放在同一层中)。使用某些业务标准,它会在函数中选择一组窗口小部件,以返回窗口小部件集。
我的问题是:我的GUI层如何将集合绑定到网格?我知道widgetcollection是数据网格的有效数据源,但是 GUI层如何知道小部件和小部件集合是什么?当然,我不必从GUI中引用DAL,否定了整个观点。
答案 0 :(得分:0)
(使用SubSonic 2.x)在我的BLL类中,我有一个属性,它提供对相关DAL类的对象引用。我的UI表单引用了BLL类,因此从表单中我可以通过.BLL.DAL.xxxx来解决DAL属性和方法
FWIW,我从未成功将SubSonic集合绑定到DataGridView。作为替代方案,我有时使用集合.ToTable()方法创建一个DataTable然后绑定到它,或者我使用.AddRow()手动绑定
答案 1 :(得分:0)
查看MSDN中IBindingList接口的文档,它有一个非常好的示例。 例如,在模型中创建一个使用BLL中的Customer类的CustomersList类。将网格绑定到CustomersList类的实例。表示层不了解亚音阶表类。
答案 2 :(得分:0)
您可能需要使用界面。您可以轻松地在Dal中创建一个基于Widget的界面(右键单击该类并从该类创建一个界面)。接下来,将接口添加到业务逻辑层或仅用于接口的单独项目中。完成后,您可以在DAL和GUI中添加对接口的引用。如果您将数据存储从数据库更改为XML等等,这也可以提供帮助。
答案 3 :(得分:0)
首先,我不认为这是一个令人尴尬的基本n层问题。 这是一个非常有趣的主题,我试图激发旧亚音速论坛的讨论。
我不愿意将我的GUI图层暴露给DAL。
我的GUI图层仅使用我自己的实体模型的词汇和主题与BLL对话,并且仅返回我自己的实体或列表,或者在某些情况下返回数据表。
我的BLL只与MAPping图层对话,该图层将Fetches,Saving等映射到相应的DAL CRUD方法,并将返回的Subsonic类型转换为我的实体类型。
在这样做的过程中,我很惊讶我有多少亚力克必须复制,有时候我觉得我走错了路,现在感觉更舒服,尽管它仍然需要重构和精炼。
例如,找到一种灵活的,通用的方法向我的BLL指示我想要在fetch中返回哪一行是一个我没想到的挑战,我最后编写了一个具有流畅界面的通用queryClass很像亚音速选择。
FWIW,我认为你走的是正确的轨道,我想你要做的就是决定如何在GUI中定义这些Subsonic类型。
Rob有一个你可能感兴趣的interesting discussion。