2

我正在做一些项目,我遇到了一些我不知道是否可以解决的问题。所以我的问题是这样的:

我的项目中有 4 个类:

public abstract class ABaseDynamicLayer
{
    public virtual int LayerID { get; set; }
    public virtual string URIPath { get; set; }
}

public class RasterDynamicLayer : ABaseDynamicLayer
{
}

public class TerrainDynamicLayer : ABaseDynamicLayer
{
}

public class VectorDynamicLayer : ABaseDynamicLayer
{
}

现在我的数据库看起来像这样:

T_DYNAMIC_LAYERS

ID  |   URIPath  |  TYPE  |
---------------------------
1   | c:\map1.mp |   1    |
2   | c:\map2.mp |   3    |
3   | c:\map5.mp |   2    |

T_TYPES

ID  |  DESCRIPTION  |
---------------------
1   |  Raster       |
2   |  Terrain      |
3   |  Vector       |

现在我的目标是将 T_DYNAMIC_LAYERS 映射到我的项目中,当我这样做时,我不想保存图层的类型,而是想从我的类列表中创建合适的对象作为 T_DYNAMIC_LAYERS 中提到的类型。

例如:

假设我们正在映射 T_DYNAMIC_LAYERS 中的第一行。1)我们将 ID 列映射到 ID 属性。2) 我们将 URIPath Column 映射到 URIPath 到 URIPath 属性。

这很容易,但毕竟想要的结果是我想从第一行获取一个 RasterDynamicLayer 对象,因为该行中的类型是 1(1 等于 RasterDynamicLayer)。

可以做到吗?如果可以做到,我该怎么做?

感谢您的任何帮助!

4

1 回答 1

0

我认为你需要工厂模式 的简单使用示例:

enum LayerType
{
    Raster,
    Terrain,
    Vector
}

public static ABaseDynamicLayer CreateLayer(LayerType type, int id, string uri)
{
    ABaseDynamicLayer layer;
    switch (type)
    {
        case LayerType.Raster:
            layer = new RasterDynamicLayer();
            break;
        case LayerType.Terrain:
            layer = new TerrainDynamicLayer();
            break;
        case LayerType.Vector:
            layer = new VectorDynamicLayer();
            break;
        default: throw new ArgumentException("Type not supported:" + type.ToString()); 
    }
    layer.LayerID = id;
    layer.URIPath = uri;
    return layer;
}
于 2012-10-17T15:37:43.253 回答