2016-12-17 37 views
0

Я изучаю некоторые вещи о архитектуре контроллера Model View, потому что я хочу реализовать ее в своем проекте, так что, насколько я понимаю, это выглядит следующим образом:Архитектура C# MVC, я должен вызвать хранимые процедуры из MODEL или CONTROLLER

M - модель, часть проекта, в котором я добавить подключение к базе данных (LINQ к классам SQL или ADO.NET Entity, например)

V - вид, часть проекта, где я держу свои формы, если мы говорим о приложении C# windows form

C - контроллер, часть проекта, где я методы для извлечения и вставки данных из моих форм в базу данных, например, писал: если я хочу, чтобы выбрать всех клиентов из базы данных, я бы сделал следующий:

public class CustomerController 
{ 
    public static List<Customers> GetActiveCustomers() 
    { 
     return DataServices.DB.proc_SelectAllActiveCustomers().ToList(); 
    } 
} 

Итак, в коде выше, в моем контроллере, я звоню в хранимую процедуру proc_SelectAllActiveCustomers, которая заполнит мою форму всеми активными клиентами, если я позвоню ей из некоторых из моих форм.

Итак, ребята это правильно? Или я должен назвать мои хранимые процедуры каким-то образом из модели, или на самом деле это потому, что DataServices.cs находится в модели и используется для открытия соединения с базой данных?

Я запутался об этом ..

Может кто-нибудь объяснить мне это правильно или нет?

Спасибо, ребята, приветствия!

+0

модель - это всего лишь POCO для сопоставления таблицы, вы можете иметь слой sevice, который содержит метод вызова хранимых процедур, и использовать служебный объект в контроллере. –

+1

. Типовое уведомление: это ** архитектура ** (а не «архитектура», как вы продолжаете повторять это снова и снова) –

+0

@marc_s спасибо, человек, вы потрясающий! –

ответ

1

В идеале ваша модель не должна ничего делать. Контроллер должен передать его в представление, чтобы отобразить его, и все. Если необходимо использовать хранимую процедуру, вы должны сделать это в контроллере.

+0

, так что мой пример хорош? Я вызываю хранимые процедуры с моего контроллера ... –

+0

Да. В идеале вы должны использовать репозиторий (https://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit -of-work-patterns-in-as-asp-net-mvc-application), но для простых вещей я часто пропускаю это тоже. –

1

Контроллер - это то, где выполняются все функции данных и другая логика. Контроллер не должен напрямую подключаться к базе данных, но может иметь контекст базы данных, в который он вводится. Затем он запросит необходимые объекты данных для заполнения Модели.

Модель имеет логику функциональности. Он считается немым объектом или DTO (объект передачи данных). Основываясь на тех технологиях, которые вы используете, он может содержать атрибуты свойств, которые можно использовать при передаче в представление для проверки и форматирования.

View предназначен для отображения модели (ов), которую вы передаете, и получения любого необходимого ввода. View должен иметь ограниченную логику или функциональность, основанную на том, что требуется для размещения правильных данных в модели, которые могут быть возвращены обратно в контроллер для обработки.

Надеюсь, что это поможет. Дай мне знать.

-1

«Модель» отвечает за передачу данных между «View» и «Controller» , хотя иногда у нее есть некоторая бизнес-логика (плохая практика, она должна быть абсолютно бессмысленным объектом), но она не должна иметь никакой зависимости для уровня бизнес-уровня или доступа к данным.

Выбранные данные должны вызываться из контроллера и вызывать какой-то репозиторий или службу или т. Д. «Контроллер» это!

p.s. чтобы избежать множественного запуска службы/репозитория, вы можете использовать «Injection Dependency», идите на это.

Смежные вопросы