当前位置:  开发笔记 > 编程语言 > 正文

在C#中构建对象的更好方法

如何解决《在C#中构建对象的更好方法》经验,为你挑选了2个好方法。

我有一个我的对象类型的应用程序,它继承自包含应用程序对象的大多数属性的基类.所有对象类型都存储在数据库的一个表中."ClassType"列确定将SqlDataReader行转换为的对象类型.

这是我目前的实施:

SqlDataReader dr = SqlServerHelper.ExecuteReader("MyStoreProc", MySqlParmas);

if(dr.HasRows)
{
    while(dr.Read())
    {
        switch(dr["ClassType"].ToString())
        {
            case "ClassA":
                //cast sqldatareader a ClassA object
                ClassA a = new ClassFactory.CreateClassA(object p1, object p2);
            case "ClassB":
                //cast sqldatareader a ClassB object
                ClassB b = new ClassFactory.CreateClassB(object p1, object p2);
        //it continues for all objects with app....
        }
    }
}

dr.Close()

我的问题是他们对这种处理有更好的实现吗?



1> FlySwat..:

如果您不想切换到生成ORM的代码,则采用此方法.

在对象表中,包括对象的完全限定类型名称.

然后,你可以做以下事情:

    private Dictionary _objectTypes = new Dictionary();

    public ObjectFactory()
    {
        // Preload the Object Types into a dictionary so we can look them up later
        foreach (Type type in typeof(ObjectFactory).Assembly.GetTypes())
        {
            if (type.IsSubclassOf(typeof(BaseEntity)))
            {
                _objectTypes[type.Name.ToLower()] = type;
            }
        }
    }

现在,有了预装的映射器,您可以用以下代码替换代码:

    string objectName = dr["ClassType"].ToString().ToLower();
    Type objectType;

    if (_objectTypes.TryGetValue(objectName, out objectType))
    {
       return (BaseEntity)Activator.CreateInstance(objectType,reader);
    }        

将读者传递给对象的构造函数,以便它可以完全填充自己,这种类型的代码不属于工厂.



2> Jim Burger..:

我想我会倾向于使用Object-Relational Mapper.NHibernate是.NET平台现有的,免费的,成熟的ORM解决方案的一个例子.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有