gpt4 book ai didi

c# - 如何适本地设计数据访问层?

转载 作者:太空狗 更新时间:2023-10-29 18:04:14 25 4
gpt4 key购买 nike

我有以下数据访问层 (DAL)。我想知道它是否设置正确,或者我是否需要改进它?

public class User 
{

}

//Persistence methods
static class UserDataAccess
{
UsersDAL udal = // Choose SQL or FileSystem DAL impl.


InsertUser(User u)
{
// Custom logic , is 'u' valid etc.

udal.Insert(u);
}
}

abstract class UsersDAL
{
GetUserByID();
InsertUser(u);
...
}

// implementaitons of DAL

static class UsersSQLStore : UsersDAL
{

}

static class UsersFileSystemStore : UsersDAL
{

}

我将存储层与 User 类分开,以访问进一步调用任何自定义 DAL 的方法集合。

在 DAL 实现中使用 static 是否正确?

请提出更正或改进方法。我在分层编写代码方面经验不足。

最佳答案

这些类都不应该是static。我认为您也不应该将您的类命名为 DAL,因为它是数据访问层的缩写,并且类本身不是一个层(至少在我看来是这样)。您可以使用广泛采用的术语 repository反而。我建议您执行以下操作:

public class User{

}

public abstract class UserRepository{
public abstract void InsertUser(User user);
}

public class SqlUserRepository : UserRepository{
public override void InsertUser(User user)
{
//Do it
}
}

public class FileSystemUserRepository : UserRepository{
public override void InsertUser(User user)
{
//Do it
}
}

public class UserService{
private readonly UserRepository userRepository;

public UserService(UserRepository userRepository){
this.userRepository = userRepository;
}

public void InsertUser(User user){
if(user == null) throw new ArgumentNullException("user");
//other checks
this.userRepository.InsertUser(user);
}
}

请注意,UserService 在其构造函数中注入(inject)了抽象类 UserRepository 的实例。您可以使用 Dependency Injection (DI) 框架自动为您执行此操作,例如来自 Castle Project 的温莎城堡.它将允许您在配置文件或代码中指定从抽象 (UserRepository) 到具体实现(例如 SqlUserRepository)的映射。

希望这能为您指明正确的方向,如果您需要更多信息,请询问。

关于c# - 如何适本地设计数据访问层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4618152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com