N-уровневая архитектура с сервисным уровнем, бизнес-уровнем и структурой сущностей
Мне просто нужна была обратная связь / помощь в том, как я проектирую свое приложение. Моя текущая структура решения выглядит примерно так:
UI (Actual MVC application) Core (only Controllers & ViewModels) Services BLL Data (Entity framework DbContext, mapped to Domain objects) Domain (Simple POCO objects) InterfacesДругие вещи
Ninject to inject DbContext into Controller (per request) AutoMapper to map Domain objects to ViewModelВсе сборки имеют ссылку на проект Интерфейсы, который, как следует из названия, является не чем иным, как простыми интерфейсами (то есть IDbContext, IRepository и т. Д.).
Проект «Услуги» «Связывает» вместе все остальное. Это единственная сборка, которая имеет прямую ссылку на уровень доступа к данным (Entity Framework).
Я предоставил код ниже:
Пример контроллера выглядит следующим образом:
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();
}
...
Я ищу некоторые отзывы / способы улучшения. Я заметил, что для базовых задач мои методы уровня обслуживания будут точно такими же, как методы бизнес-уровня (то есть «проходят через» функции). Я надеюсь, что эта абстракция будет полезна для более сложных задач, которые могут потребовать вызова нескольких методов бизнес-уровня. Будет ли лучше включить бизнес-логику в сервисный уровень?