Выполняет ли модель или контроллер crud в asp.net?

Я новичок в ASP.NET и MVC, и меня смущает логика CRUD. Я нашел следующее объяснение из ресурса, однако, насколько мне известно, CRUD выполняются в контроллере, например, они достигаются такими действиями, как Index, Create, DeleteConfirm, Edit и т. д. Я неправильно понимаю эту концепцию ? enter image description here

Я думаю, здесь Model означает модель предметной области, а не «M» из MVC.

Slava Utesinov 26.10.2018 07:38
0
1
268
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Да, вы правы, операции CRUD могут выполняться в контроллере с помощью действий, и модель может помочь в этом. Модель - это не что иное, как класс, который будет иметь в нем свойства. Например: «Сотрудник» - это класс, который имеет разные свойства, такие как «Имя, Фамилия, Идентификатор сотрудника, Электронная почта, DateOfJoining и т. д.». Теперь, если вам нужно выполнить операцию CRUD над этим, вы должны написать код в классе контроллера для различных действий, используя этот класс модели «Сотрудник».

Только модель не может выполнять операцию CRUD.

Вы можете делать это где угодно, но вы нарушите концепцию «разделения проблем». Контроллер должен заботиться только о том, какое представление или какое действие он собирается вызвать или выполнить. Модель следует использовать только так, как будут структурированы ваши данные, обычно она похожа на то, как выглядят свойства вашей базы данных. Короче говоря, ваша Модель (модель класса) должна иметь минимальное мышление. Например, у вас есть таблица под названием "Человек" со столбцами IDPerson, FirstName, LastName. Ваша модель должна быть примерно такой:

public class Person {
     public IdPerson {get;set;}
     public FirstName {get;set;}
     public LastName {get;set;}
}

Допустим, у вас есть представление, которое показывает детали человека, который может быть чем-то нравится:

public class PersonController : Controller

public ActionResult GetPerson(int IdPerson){
     PersonBusinessLogic pbl = new PersonBusinessLogic();
     Person p = pbl.GetPersonFromDatabase(id); //To add more consistency, the data access is on a separate class for better maintenance and to emphasize "Separation of Concerns"

ViewResult vr = new ViewResult()
     {
            ViewName = this.View,//This is where you assign the page if you have other pages for this action
            ViewData = new ViewDataDictionary(ViewData)
            {
                Model = p
            }                             
      };

      return vr;
}

Для вашей нефти:

[HttpPost]
public ActionResult CreatePerson(Person p)
{
        try
        {
            if (ModelState.IsValid)
            {              
        PersonBusinessLogic pbl = new PersonBusinessLogic();
        pbl.CreatePersonToDatabase(p);
                return RedirectToAction("Index", "Home");
            }
        }
        catch(Exception ex){
            ModelState.AddModelError("",ex.Message);
        }

        return View(p);
}

[HttpPost]
public ActionResult UpdatePerson(Person p)
{
        try
        {
            if (ModelState.IsValid)
            {              
        PersonBusinessLogic pbl = new PersonBusinessLogic();
        pbl.UpdatePersonToDatabase(p);
                return RedirectToAction("Index", "Home");
            }
        }
        catch(Exception ex){
            ModelState.AddModelError("",ex.Message);
        }

        return View(p);
}

[HttpPost]
public ActionResult DeletePerson(Person p)
{
        try
        {
            if (ModelState.IsValid)
            {              
        PersonBusinessLogic pbl = new PersonBusinessLogic();
        pbl.DeletePersonByIDFromDatabase(p.IdPerson);
                return RedirectToAction("Index", "Home");
            }
        }
        catch(Exception ex){
            ModelState.AddModelError("",ex.Message);
        }

        return View(p);
}

Чтобы дать вам лучшее представление, найдите статью о том, как MVC широко применяется в качестве концепции, и вы высоко оцените процесс обучения.

Ответ принят как подходящий

Согласно изображению выше, это модель «Doamin Model», а не «M» из MVC, как сказал Слава Утесинов, это концепция DDD (Domain-Driven Design).

В ASP.NET MVC традиционный способ выполнения CRUD заключается в действиях контроллеров, и вы правильно понимаете.

В концепции DDD (Domain-Driven Design) мы выполняем CRUD в модели предметной области.

Независимо от того, что мы используем архитектуру DDD или традиционные способы, нам нужно делать это на основе базовой архитектуры MVC.

Дополнительная информация о DDD для справки: Доменно-ориентированный дизайн - что это такое и как вы его используете?

Другие вопросы по теме