从数据库加载类实例的方法是静态还是非静态?

时间:2016-04-01 14:29:31

标签: c# .net

以下是从数据库加载人员的两个示例。我发现静态方法更清晰,但是在使用抽象/虚拟方法和接口时会产生困难。

那么哪种做法更好?

静态

class Person
{
    public static Person Load(int id)
    {
        // Returns person from database
    }
}

var id = 1;
var person = Person.Load(id);

非静态

class Person
{
    public Person Load(int id)
    {
        // Returns person from database
    }
}

var id = 1;
var person = new Person().Load(id);

2 个答案:

答案 0 :(得分:1)

我将您的数据对象保持愚蠢和分离,并将您的数据库逻辑放在其他位置,例如存储库/工厂/经理或任何您想要调用它的地方 - 并且该存储库可以是您拥有接口的地方和/或继承:

public class PersonRepo : BaseRepo, IPersonRepo {
    Person IPersonRepo.Get(int id) {
        // Get from DB
    }
}

如果您没有使用自定义存储库,甚至可以使它更通用:

public interface IRepository<T>
{
    T Get(int id);
}

public abstract class BaseRepo<T> : IRepository<T>
{
    public abstract T Get(int id);
}

public class PersonRepo : BaseRepo<Person>
{
    public override Person Get(int id)
    {
        // Get from DB
    }
}

答案 1 :(得分:0)

避免使用静态,因为代码将无法通过单元测试和紧密耦合。

使用更好的接口和抽象类来分离行为和基本实现。然后你就可以轻松地模仿你的部分了。

还使用依赖注入来减少代码耦合。

将数据传输对象即实体(人类)保持为简单的POCO。并提供服务(存储库,服务,经理)来处理与您的实体的操作。

了解SOLIDKISSDRYYAGNI和其他OOP技术。

请参阅when to use statics