从类中的数据库存储/检索数据时的最佳实践

时间:2012-02-26 00:35:19

标签: c# asp.net sql-server database class

我想知道在处理对象和类时,在数据库中存储和检索数据时最好的代码设计是什么。

我可以通过两种方式做到这一点。

在类构造函数中,我查询数据库并将所有信息存储在类中的实例变量中,并使用getter / setter检索它们。这样我总能得到我想要的任何信息,但在很多情况下,不会一直需要所有的信息。

public class Group {
    public int GroupID { get; private set; }
    public string Name { get; private set; }
    public Group(int groupID)
    {
        this.GroupID = groupID;
        this.Name = // retrieve data from database
    }
    public string getName()
    {
        // this is just an example method, I know I can retrieve the name from the getter :)
        return Name;
    }
}

另一种方法是创建一些方法并将groupID作为参数传递,然后在数据库中查询我需要的特定信息。这可能会导致更多的查询,但我只会得到我需要的信息。

public class Group {    
    public Group()
    {
    }
    public string getName(int groupID)
    {
        // query database for the name based on groupID
        return name;
    }
}

您认为最好的方法是什么?是否有最佳实践可以与我一起去,还是由我认为我觉得最好的工作?

3 个答案:

答案 0 :(得分:1)

您不希望在构造函数中执行繁重的数据库工作。应该用方法进行繁重的工作。

您也不希望将数据库工作与保存数据的实体类耦合在一起。如果您希望方法从数据库中返回其中两个对象,该怎么办?例如GetGroups() - 如果不进行数据库工作,你甚至无法构造一个。对于返回多个的东西,存储和检索与实体类分离。

相反,将数据库工作与实体对象分离。一个选项是你可以使用一个带有GetFoo或GetFoos等方法的dataaccesslayer ...查询数据库,填充对象并返回它们。

如果您使用ORM,请参阅:

https://stackoverflow.com/questions/3505/what-are-your-favorite-net-object-relational-mappers-orm

答案 1 :(得分:1)

延迟加载与早期加载,这实际上归结为,最好取决于使用情况。

大多数情况下,这意味着相关的实体 - 例如,如果你正在处理一个单独的地址,那么将该城市的读取与州的读取分开将是疯狂的; OTOH在返回公司员工阅读地址信息的清单时,可能是浪费时间和记忆。

此外,这些不是互斥的选项 - 您可以拥有一个调用数据库的构造函数,以及一个使用提供的数据的构造函数。

答案 2 :(得分:0)

如果它是关系数据库,最好的方法是使用ORM(对象关系映射)。请参阅此处获取ORM-mappers列表:

https://en.wikipedia.org/wiki/List_of_object-relational_mapping_software