gpt4 book ai didi

c# - 典型 3 层业务层中的静态方法与实例方法

转载 作者:行者123 更新时间:2023-11-30 23:29:45 26 4
gpt4 key购买 nike

<分区>

目前,我正在使用 ASP.NET MVC 构建一个典型的 3 层网络应用程序。我已经使用依赖注入(inject) (Autofac) 进行设置,如下所示:

public class UserController : BaseController
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
this._userService = userService;
}
}

public class IUserService
{
void InsertUser(User user);
void UpdateUser(User user);
void DeleteUser(User user);
}
public class UserService : IUserService
{
private readonly IRepository<User> _userRepository;
public UserService(IRepository<User> userRepository)
{
this._userRepository = userRepository;
}
public void InsertUser(User user)
{
_userRepository.Insert(user);
}
public void UpdateUser(User user)
{
_userRepository.Update(user);
}
public void DeleteUser(User user)
{
_userRepository.Delete(user);
}
}

Repository 是一个典型的使用 EF 的通用存储库。

public interface IRepository<T> where T : BaseEntity
{
void Insert(T entity);
void Update(T entity);
void Delete(T entity);
}

问题是我的应用程序有很多实体,对于每个实体,我必须在服务层复制上述代码以进行 CRUD 操作。例如:对于实体“Role”,我有“InsertRole”、“UpdateRole”、“DeleteRole”……以及更多其他实体。因此,我尝试通过使用如下静态方法将 CRUD 操作提取到静态类“CommonService”来重构以删除重复代码:

public static class CommonService
{
public static void Insert<T>(T entity) where T : BaseEntity
{
var repository = EngineContext.Current.Resolve<IRepository<T>>();
repository.Insert(entity);
}
public static void Update<T>(T entity) where T : BaseEntity
{
var repository = EngineContext.Current.Resolve<IRepository<T>>();
repository.Update(entity);
}
public static void Delete<T>(T entity) where T : BaseEntity
{
var repository = EngineContext.Current.Resolve<IRepository<T>>();
repository.Delete(entity);
}
}

在这个类(class)中,我将删除 CRUD 操作服务中的重复代码。在 Controller 中,我只调用 CommonService.Insert(user);...现在对我真的很好。我还有其他正常的服务方法,并且没有重复的 CRUD。但我想知道这种方法是否有任何缺点,除了单元测试(我不会对 CRUD 进行单元测试)。 Web 环境(ASP.NET MVC)中的内存管理和并发处理有什么问题吗?我还没有使用 EF 实现数据处理的并发机制(同时更新一个实体...)

提前致谢!米尔多尔。

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