以下是从数据库加载人员的两个示例。我发现静态方法更清晰,但是在使用抽象/虚拟方法和接口时会产生困难。
那么哪种做法更好?
静态:
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);
答案 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)