Squeak.ru - шаблоны программирования

Дилемма на пути реализации MVC 4 добавления/редактирования/списка действий

Я работаю (фактически занимаюсь рефакторингом) над каким-то проектом, у меня есть панель администратора, есть регулярные действия администратора ДОБАВИТЬ/РЕДАКТИРОВАТЬ/СПИСАТЬ, что они делают, вставляют/обновляют/или перечисляют объекты в/из базы данных.

Что я обнаружил в этом проекте, так это то, что между Add и Update ViewModels и Views всегда есть дублирующийся код, это копирование с небольшими изменениями между ними. Это что-то вроде этого:

EditCardsViewModel AddCardViewModel

почти абсолютно идентичны, как я уже сказал, тогда EditCardVIew использует EditCardsViewModel как модель, AddView использует AddCardViewModel, как по мне, это дублирование кода. Когда я связался с разработчиком, создавшим это, он сказал, что это лучшие практики, и это очень читаемо, вы знаете, где все можно найти... и бла-бла, у меня недостаточно опыта, чтобы решить. Итак, вопрос в том, каковы лучшие практики для этого? Я имею в виду, не могли бы вы указать мне на какую-нибудь хорошую статью, объясняющую, как ADD/UPDATE/LIST следует выполнять в MVC.

Спасибо.


  • Вы «можете» наследовать общие свойства от базовой модели представления, но это может усложнить ситуацию. Если у вас нет большого количества просмотров, в которых вы делитесь вещами, может быть проще оставить все как есть. 10.03.2013

Ответы:


1

Да, поскольку Create и Edit практически не отличаются друг от друга, я обычно делаю примерно так:

КОНТРОЛЕР:

public class ActivityController : BaseController
    {
        public ActionResult Index()
        {
            var model = //Get your List model here...

            return View(model);
        }

        public ActionResult Create()
        {
            var model = new ActivityModel(); //Create new instance of whatever your model is
            return View("Edit", model); //NOTE: Pass the model to the "Edit view
        }

        public ActionResult Edit(int id)
        {
            var model = // your logic here to get your model based on ID param
            return View(model);
        }

        [HttpPost]
        public ActionResult Delete(int id)
        {
            try
            {
                // your logic here to delete based on ID param
                return Json(new { Success = true, Message = "Entity updated" }); //AJAX result
            }
            catch (Exception x)
            {
                return Json(new { Success = false, Message = x.GetBaseException().Message }); //AJAX result
            }
        }

        [HttpPost]
        public ActionResult Update(ActivityModel model)//a single action to handle both add and edit operations
        {
            if (!ModelState.IsValid)
            {
                return Json(new { Success = false, Message = "Please correct any errors and try again" });//AJAX result
            }

            try
            {
                if (entity.Id == 0)
                {
                    //your logic for inserting
                }
                else
                {
                    //your logic for updating
                }

                return Json(new { Success = true });//AJAX result
            }
            catch (Exception x)
            {
                return Json(new { Success = false, Message = x.GetBaseException().Message }); //AJAX result
            }
        }
    }

Таким образом, мне в основном когда-либо приходилось создавать 2 представления: Index.cshtml и Edit.cshtml.

Просто помните, что в режиме редактирования должно быть следующее: @Html.HiddenFor(m => m.Id)

Это будет использоваться в действии Update() для проверки необходимости вставки или обновления.

Не видя вашего кода, я не уверен, что это применимо к вашей ситуации...

10.03.2013
  • Это именно то, что происходит в моем коде, поэтому вы говорите, что это лучшие практики в MVC? Если так, я оставлю это как есть ... Спасибо 10.03.2013
  • Мой пример будет немного отличаться от вашего тем, что я использую только одну модель, тогда как вы использовали 2: 1 для редактирования и 1 для создания. Я просто использую одну модель, а затем выясняю, что с ней делать (вставить или обновить) в действии Update() в зависимости от того, имеет ли она ID › 0 или нет. Таким образом, вам не нужно поддерживать 2 отдельных класса и 2 отдельных представления. 10.03.2013
  • Подождите, может я что-то не так понял, у вас 1 модель на 2 отдельных вида, верно? 10.03.2013
  • оба действия Create () и Edit () используют одну и ту же модель и одно и то же представление.. поскольку пользовательский интерфейс будет точно таким же (в большинстве случаев я все равно видел).. но, как я уже сказал: я не Я не видел ваш код, поэтому не знаю, подходит ли вам этот подход. 10.03.2013
  • Возможно, вы невнимательно посмотрели на действие Create(). Я говорю ему использовать представление Edit. 10.03.2013

  • 2

    Если вы скачаете MVCScaffolding, шаблоны будут оптимизированы для дизайна типа AddEdit View. Этот блог — полезный ресурс для его использования.

    11.03.2013
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...