只是想对我构建应用程序的方式提供一些反馈/帮助。我当前的解决方案结构如下所示:
- UI(实际的 MVC 应用程序)
- 核心(仅限控制器和视图模型)
- 服务
- BLL
- 数据(实体框架 DbContext,映射到域对象)
- 域(简单 POCO 对象)
- 接口
其他的东西
- Ninject 将 DbContext 注入控制器(每个请求)
- AutoMapper 将域对象映射到 ViewModel
所有程序集都有一个对 Interfaces 项目的引用,顾名思义,它只不过是简单的接口(即 IDbContext、IRepository 等)。
服务项目将其他一切“联系”在一起。它是唯一直接引用数据访问层(实体框架)的程序集。
我在下面提供了一些代码:
控制器的示例如下所示:
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();
}
...
我正在寻找一些反馈/改进方法。我注意到对于基本任务,我的服务层方法将与业务层方法完全相同(即“通过”功能)。我希望这种抽象有助于更复杂的任务,这些任务可能需要调用多个业务层方法。在服务层中包含业务逻辑会更好吗?