只是想用我architecturing我的应用程序的方式一些反馈/帮助。 我目前的解决方案结构看起来是这样的:
- UI(实际MVC应用程序)
- 核心(仅控制器和的ViewModels)
- 服务
- BLL
- 数据(实体框架的DbContext,映射到域对象)
- 域(简单对象POCO)
- 接口
其他的东西
- Ninject注入的DbContext到控制器(每个请求)
- AutoMapper映射域对象到视图模型
所有组件都在接口项目,其中,顾名思义,无非是简单的接口(即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));
}
...
该UserService类:
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();
}
...
我正在寻找一些反馈/改进的方法。 我注意到,对于基本任务,我的服务层方法将是完全一样的业务层的方法(即“穿越”功能)。 就是我希望的是,这种抽象会更复杂的任务,这可能需要多个业务层方法的调用很有帮助。 这纯粹是更好地包括在服务层商业逻辑?