Можно ли использовать Upsert для метода контроллера или следует разделить на Update и Insert?

Недавно я завершил онлайн-руководство, в котором инструктор объединил свои вызовы Update и Insert в один метод Upsert:

[HttpGet]
        public IActionResult Upsert(int? id)
        {
            SelectListViewModel<Attraction> attraction = new SelectListViewModel<Attraction>()
            {
                Entity = new Attraction(),
                Cities = new SelectList(_db.Cities.OrderBy(c=>c.Name),"Id","Name")
            };

            if (id != null)  //if id exists its an edit, else its create
            {
                attraction.Entity = _db.Attractions.FirstOrDefault(a => a.Id == id);            
            }
            return View(attraction);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]

        public IActionResult Upsert([Bind("Id,Name,Description,CityId")]Attraction attraction)
        {
            if (ModelState.IsValid)
            {
                if (attraction.Id == 0)
                {
                    _db.Attractions.Add(attraction);
                }
                else {
                    var attractionFromDb = _db.Attractions.FirstOrDefault(a => a.Id == attraction.Id);
                    _db.Attractions.Update(attractionFromDb);                
                }
                _db.SaveChanges();
                return RedirectToAction(nameof(Index));
            }
            return View(attraction);
        }

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

0 ответов