Контроллер с TemplateService


Я работаю на мой проект веб-API шаблон.

Я просто хочу услышать какие-либо предложения, как улучшить этот код. Я слышал, что шаблон репозитория является анти-паттерн, так что я хочу сделать код без него. Любое мнение будет здорово :D

Услуги

public class TemplateService : ITemplateService
{
    private readonly ContextTemplate context;

    public TemplateService(ContextTemplate context)
    {
        this.context = context;
    }

    public int AddTemplate(TemplateInput input)
    {
        var template = new TemplateModel()
        {
            Name = input.Name,
            CreatedDate = DateTime.UtcNow
        };

        context.TemplateModel.Add(template);
        context.SaveChanges();
        return template.Id;
    }

    public int UpdateTemplate(TemplateInput input)
    {
        var template = GetTemplate(input.Id);
        if (template != null)  {
            template.Name = input.Name;
            template.ModifiedDate = DateTime.UtcNow;
            context.Update(template);
            context.SaveChanges();
        }
        return (int)template?.Id;
    }

    public bool ArchiveTemplate(int templateId)
    {
        var isArchiveSuccessfull = false;
        var template = GetTemplate(templateId);
        if (template != null)
        {
            template.IsArchived = true;
            isArchiveSuccessfull = true;
            context.Update(template);
            context.SaveChanges();
        }
        return isArchiveSuccessfull;
    }

    public IEnumerable<TemplateModelDto> GetTemplates()
    {
        return Mapper.Map<List<TemplateModel>, List<TemplateModelDto>>(this.context.TemplateModel.Where(x=>!x.IsArchived).ToList());
    }

    public TemplateModel GetTemplate(int templateId)
    {
        var template = context.TemplateModel.FirstOrDefault(x => x.Id == templateId);
        return template;
    }

Контроллер

 [Route("api/[controller]")]
 public class TemplatesController : Controller
 {
    private readonly ITemplateService templateService;
    private readonly ILogger logger;

    public TemplatesController(ITemplateService templateService, ILogger<TemplatesController> logger)
    {
        this.templateService = templateService;
        this.logger = logger;
    }
    // GET api/templates
    [HttpGet]
    public IEnumerable<TemplateModelDto> Get() => templateService.GetTemplates();

    // GET api/templates/5
    [HttpGet("{templateId}")]
    public TemplateModel GetTemplate(int templateId) =>  templateService.GetTemplate(templateId);

    // POST api/templates
    [HttpPost]
    public int Post([FromBody]TemplateInput input) => templateService.AddTemplate(input);

    // PUT api/templates/5
    [HttpPut("{templateId}")]
    public int Put(int templateId, [FromBody]TemplateInput input) => templateService.UpdateTemplate(input);

    // DELETE api/templates/5
    [HttpDelete("{templateId}")]
    public Boolean ArchiveTemplate(int templateId) => templateService.ArchiveTemplate(templateId);
}


Комментарии
1 ответ

Вам придется абстрагироваться от каких-то конкретных зависимостей от контроллера. Я говорю, что хорошо сделано для развязки контроллера и позволит лучше контролепригодность контроллер.

ContextTemplate предполагается DbContext производные, в которых уже реализованы единицы работы и репозитория шаблон, так там действительно нет смысла в повторной реализации картины.

ИМО, я не вижу проблемы с выше код не только не использование явно вводят ILogger в контроллере, который может быть удален, если не будет использовать его в контроллер. Ведение журнала можно считать сквозной проблемы в АСП.сетка-основной и обрабатываются внешнего контроллера.

0
ответ дан 7 февраля 2018 в 07:02 Источник Поделиться