Im используя asp.net core. Вот основной способ использования модели с контроллером.Когда нам нужны классы данных?
public class BookController : Controller
{
private readonly ApplicationDbContext _context { get; set; }
public BookController(ApplicationDbContext context)
{
_context = context;
}
public IActionResult Create(Book model)
{
// adding new model
}
public IActionResult Edit(Book model)
{
// modifying the model
}
public IActionResult Delete(Book model)
{
// removing the model
}
}
Мой вопрос: когда/должен ли я внедрять код внутри контроллера? Когда/должен ли я реализовать его в другом классе?
Что-то вроде этого:
public interface IBook
{
int Add(Book book);
int Update(Book book);
int Remove(Book book);
}
public class BookData : IBook
{
private readonly ApplicationDbContext _context { get; set; }
BookData(ApplicationDbContext context)
{
_context = context
}
public int Add(Book model)
{
// ...
return _context.SaveChanges();
}
// other implements...
}
Затем, назвав его внутри контроллера:
public IActionResult Create(Book model)
{
var bookData = new BookData(_context);
int result = bookData.Add(model);
// ...
}
Для интерфейса, я думаю, что это может быть полезно для случая: У меня есть много контроллеров, которые требуют же имена действий/методов.
Пример: MessageController
требует 3 действий/методов, по крайней мере (Create/Add
, Edit/Update
, Delete/Remove
). Это же для NotificationController
класса, CommentController
класса ...
Таким образом, интерфейс может быть улучшена до:
public interface IMyService<T> where T : class
{
int Add(T model);
int Update(T model);
int Remove(T model);
}
public class MyService<T> : IMyService<T> where T : class
{
private readonly ApplicationDbContext _context { get; set; }
public MyService(ApplicationDbContext context)
{
_context = context;
}
public int Add(T model)
{
Type type = typeof(model);
if (type == typeof(Book))
{
// adding new book model
}
else if (type == typeof(Comment))
{
// adding new comment model
}
// ...
return -1;
}
// other implements...
}
ли я что-то неправильно?