-1

我需要将实现相同接口(例如 IFoo)的不同数据对象转换为平面 DataTable。我当前的实现是创建一组IFoo作为输入参数的函数,将 IFoo 转换为其类,然后返回一个 DataTable。

例如对于类Apple 我有以下功能:

public DataTable AppleToDataTable (IFoo obj)
{
    Apple apl = obj as Apple;
    // some conversion logic here.
}

对于课堂Orange,我有类似的东西:

public DataTable OrangeToDataTable (IFoo obj)
{
    Orange org = obj as Orange;
    // some conversion logic here.
}

我用 adelegate来指向这组函数。在我的配置 XML 文件中,我有一个键值对列表,将我的数据对象与转换器函数相关联(数据对象和转换器函数不是一对一的映射,即对于同一个数据对象,我可能想要将其转换成不同的DataTables。每个DataTable只包含部分数据)。

当我收到 aIFoo时,它包含一个唯一的 id,它告诉我它是哪个数据对象,然后我使用配置文件中的映射将数据对象发送到正确的函数并获取 DataTable。

所以我的问题是:有没有更好的设计来完成这项任务?任何输入都受到高度赞赏。非常感谢你!

4

1 回答 1

0

看起来你在这里没有问题。我认为您的设计没有任何缺点,除了您在这里分离了转换映射。

另一种方法是使用战略模式(重载)。例如:

public class Converter
{
    public DataTable Convert(Apple obj)
    {

    }
    public DataTable Convert(Orange obj)
    {

    }
    public DataTable Convert(Mango obj)
    {

    }
    public DataTable Convert(Avocado obj)
    {

    }
}

恕我直言,这是进行转换的更清洁方法。

于 2013-05-06T02:41:57.430 回答