gpt4 book ai didi

c# - 具有服务层、业务层和 Entity Framework 的 N 层架构

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

只是想就我构建应用程序的方式获得一些反馈/帮助。我当前的解决方案结构如下所示:

  • UI(实际的 MVC 应用程序)
  • 核心(仅 Controller 和 ViewModel)
  • 服务
  • BLL
  • 数据( Entity Framework DbContext,映射到域对象)
  • 域(简单的 POCO 对象)
  • 接口(interface)

其他内容

  • Ninject 将 DbContext 注入(inject) Controller (根据请求)
  • AutoMapper 将域对象映射到 ViewModel

所有程序集都有对 Interfaces 项目的引用,顾名思义,它只不过是简单的接口(interface)(即 IDbContext、IRepository 等)。

服务项目将其他一切“联系”在一起。它是唯一直接引用数据访问层( Entity Framework )的程序集。

我在下面提供了一些代码:

Controller 的示例如下所示:

namespace Core.Controllers
{
public class HomeController : Controller
{
private IDbContext dbContext;

public HomeController(IDbContext dbContext)
{
this.dbContext = dbContext;
}

public ActionResult Users()
{
UserService userService = new UserService(dbContext);
var users = userService.GetAllUsers();
return View(Mapper.Map<IEnumerable<UserListViewModel>>(users));
}
...

用户服务类:

namespace Services
{
public class UserService
{
private readonly IDbContext dbContext;

public UserService(IDbContext dbContext)
{
this.dbContext = dbContext;
}

public IEnumerable<User> GetAllUsers()
{
IRepository<User> userRepository = new Repository<User>(dbContext);
UserBLL userBLL = new UserBLL(userRepository);
return userBLL.GetAllUsers();
}
...

最后是业务层类:

namespace BLL
{
public class UserBLL
{
private readonly IRepository<User> userRepository;

public UserBLL(IRepository<User> userRepository)
{
this.userRepository = userRepository;
}

public IEnumerable<User> GetAllUsers()
{
return userRepository.Get();
}
...

我正在寻找一些反馈/改进方法。我注意到对于基本任务,我的服务层方法将与业务层方法完全相同(即“传递”功能)。我希望这种抽象对可能需要调用多个业务层方法的更复杂的任务有所帮助。将业务逻辑包含在服务层中会更好吗?

最佳答案

快速浏览一下,我认为您的服务和 Controller /核心层不应该以这种方式将数据库上下文注入(inject)其中。他们实际上并不直接依赖它,并且以这种方式进行操作会导致一些不理想的耦合。核心层应该注入(inject)用户服务,用户服务和 BLL 应该注入(inject)存储库。存储库应具有由 DI 框架注入(inject)的 dbcontext,而不是作为依赖项传入。

关于c# - 具有服务层、业务层和 Entity Framework 的 N 层架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12080339/

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