Mun*_*yal 8 .net c# architecture design-patterns data-access-layer
我有以下数据访问层(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
{
}
Run Code Online (Sandbox Code Playgroud)
我将存储层与User类分开,以访问方法集合,进一步调用任何自定义DAL.
是使用static在DAL执行是否正确?
请建议更正或我可以做得更好的方法.我在分层编写代码方面没有太多经验.
Kla*_*sen 13
这些课程都不应该static.我不认为你应该为你的类命名DAL,因为它是数据访问层的缩写,而一个类本身不是一个层(至少在我看来).您可以使用广泛采用的术语库.我建议你做类似以下的事情:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,在构造函数中UserService注入了抽象类的实例UserRepository.您可以使用依赖注入(DI)框架自动为您执行此操作,例如Castle Project中的 Windsor Castle .它允许您在配置文件或代码中指定从abstractraction(UserRepository)到具体实现(例如SqlUserRepository)的映射.
希望这能指出您正确的方向,请询问您是否需要更多信息.
| 归档时间: |
|
| 查看次数: |
19086 次 |
| 最近记录: |