【问题标题】:CSLA, BusinessCollectionBase, and ITypedListCSLA、BusinessCollectionBase 和 ITypedList
【发布时间】:2011-03-31 14:11:14
【问题描述】:

我正在为一个使用在 .NET 2.0 CSLA 之前建模的业务对象的客户开发一个大型 Winforms 项目。升级到较新版本的 CSLA 不是一种选择。我的客户使用 CodeSmith 从数据库表中生成“基本”CSLA 风格的业务对象。所有业务对象都带有相应的“列表”类。

我遇到的一个问题是绑定到 Winforms 控件,因为生成的 List 类没有实现 ITypedList。客户告诉我,我可以扩展 List 类并自己实现它(他们提供了下面的代码 sn-p),但我正在处理相当多的业务对象,并且每次我扩展其中一个时都违反 DRY List 类来实现ITypedList。我在每个扩展 List 类中使用以下代码:

public class SomeItemListExtended : SomeItemListBase, ITypedList
{
    public string GetListName(PropertyDescriptor[] listAccessors)
    {
        return null;
    }

    public PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors)
    {
        return TypeDescriptor.GetProperties(CreateContent().GetType());
    }
}

CreateContent 只是返回 List 是其集合的项的新实例:

public BusinessBase CreateContent()
{
    return new SomeItem();
}

我一直在试图弄清楚是否有一种方法可以使用继承来避免在每个 List 类扩展中重复相同的代码,但还没有弄清楚如何在没有多重继承的情况下做到这一点,我们都知道无论如何是不可能的。如果我创建一个实现ITypedListListExtensionBase 类,我的扩展类不能同时继承自ListExtensionBase 和上例中的SomeItemListBase。如果我使用泛型参数创建基类,我将无法直接访问所有基类成员。我无法控制SomeItemListBase 的生成方式,并且已被指示按原样使用他们的业务对象框架。有什么办法可以让我在每个 List 扩展中使用相同的代码实现ITypedList?我是否应该为每个实现使用相同的代码,或者每个扩展的 ITypedList 实现是否应该不同?

【问题讨论】:

    标签: winforms data-binding collections csla


    【解决方案1】:

    由于无法修改基类,我认为您坚持在每个列表类上分别实现 ITypedList

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多