2016-11-29 7 views
0

У меня возникла проблема с тем, что лучше всего подходит для проектирования моего уровня обслуживания и использования их в моем контроллере. Вот моя забота.Разделение ядра Asp.net с использованием служебного уровня

В настоящее время я использую эту возможность для удаления категории

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public IActionResult Delete(List<Guid> ids) 
    { 
     if(ids == null || ids.Count == 0) 
      return RedirectToAction("List"); 

     _categoryService.DeleteCategories(_categoryService.GetCategoryByIds(ids)); 
     _categoryService.SaveChanges(); 

     return RedirectToAction("List"); 
    } 

моего беспокойства я должен просто пройти идентификаторы, чтобы DeleteCategories затем вызвать GetCategoryByIds внутри DeleteCategories. И если я только собираюсь удалить 1 Категорию, это лучше, чтобы добавить еще один способ, как DeleteCategory затем в контроллере проверить длину идентификаторов, и если это только один, использовать DeleteCategory вместо,

ответ

3

моей заботы должен ли я просто передать идентификаторы в DeleteCategories, а затем вызвать GetCategoryByIds внутри DeleteCategories.

Просто передайте идентификаторы DeleteCategories. Я даже не стал бы называть его GetCategoryByIds. Нет необходимости запрашивать базу данных для всей остальной информации категории, если вы планируете ее удалять.

И если я только собираюсь удалить 1 Категория, это лучше, чтобы добавить еще один способ, как DeleteCategory затем в контроллере проверить длину идентификаторов, и если это только 1, используйте DeleteCategory вместо

Я бы не стал создавать другой метод. Вы можете просто передать список с одним значением в нем. Нет ничего, что может сделать DeleteCategory, что вы не можете сделать с DeleteCategories.

+0

Привет, я не понимаю, что вы подразумеваете под _There нет необходимости запрашивать базу данных для всей остальной информации категории, если вы просто планируете ее удалять. Я использую структуру сущности, как я могу удалить, не запрашивая базу данных для удаляемого объекта? – markoverflow

+1

@markoverflow Как правило, полезно избегать запросов к базе данных, если вам это не нужно. Для удаления необходимо использовать только первичный ключ. В этом вопросе есть несколько примеров (http://stackoverflow.com/questions/2471433/how-to-delete-an-object-by-id-with-entity-framework) о том, как это сделать , –

0

Все зависит от бизнес-логики

Если пользователь имеет возможность выбрать более одной категории и удалить их сразу, то это имеет смысл иметь метод удаления принимает список ID и удалить их все, если пользователь может удалить только одну категорию, то это должно быть DeleteById(int categoryId).

Что касается вызова GetCategoryByIds, все еще зависит от вашей логики, если у вас есть какая-либо авторизация, тогда вы должны сначала получить категорию, убедитесь, что у пользователя есть доступ к удаленной категории, и продолжайте, если все в порядке.

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