Поначалу:
Я полагаю, что вы смешиваете шаблон MVC и принципы проектирования, основанные на уровнях n.
Использование подхода MVC не означает, что вы не должны разбивать свое приложение на слои.
Это может помочь, если вы видите MVC больше похожим на расширение уровня представления.
Если вы поместите код непредставления в шаблон MVC, вы очень скоро можете получить сложный дизайн.
Поэтому я бы посоветовал вам поместить свою бизнес-логику в отдельный бизнес-уровень.
Просто взгляните на это: Статья в Википедии о многоуровневой архитектуре
В нем говорится:
Сегодня MVC и аналогичные модели представления-представления (MVP) представляют собой шаблоны проектирования с разделением интересов, которые применяются исключительно к уровню представления более крупной системы.
В любом случае ... когда речь идет о корпоративном веб-приложении , вызовы из пользовательского интерфейса на уровень бизнес-логики должны размещаться внутри контроллера (представления).
Это связано с тем, что контроллер фактически обрабатывает вызовы к определенному ресурсу, запрашивает данные, делая обращения к бизнес-логике, и связывает данные (модель) с соответствующим представлением.
Грязь сказал вам, что бизнес-правила входят в модель.
Это также верно, но он перепутал модель представления ("M" в MVC) и модель уровня данныхпроектирование приложений на уровне уровня.
Таким образом, допустимо поместить бизнес, связанный с базой данных, правила в модель (уровень данных) вашего приложения.
Но вы не должны размещать их в моделиваш MVC-структурированный уровень представления, так как это относится только к определенному пользовательскому интерфейсу.
Этот метод не зависит от того, используете ли вы управляемый доменом подход или подход, основанный на сценариях транзакций.
Позвольте мне визуализировать это для вас:
Уровень представления: модель - представление - контроллер
бизнес-уровень: логика домена - логика приложения
уровень данных: хранилища данных - уровень доступа к данным
Модель, которую вы видите выше, означает, что у вас есть приложение, которое использует MVC, DDD и независимый от базы данных слой данных.
Это распространенный подход для разработки крупномасштабного корпоративного веб-приложения.
Но вы также можете уменьшить его, чтобы использовать простой не-DDD бизнес-уровень (бизнес-уровень без доменной логики) и простой уровень данных, который записывает данные непосредственно в конкретную базу данных.
Вы можете даже отбросить все данные.слой и доступ к базе данных напрямую с бизнес-уровня, хотя я не рекомендую его.
В этом-то и дело ... Надеюсь, это поможет ...
[Примечание:] Вы также должны осознавать тот факт, что в настоящее время существует более чем одна "модель" вприложение.Обычно каждый слой приложения имеет свою собственную модель.Модель уровня представления зависит от вида, но часто не зависит от используемых элементов управления.Бизнес-уровень также может иметь модель, называемую «модель домена».Обычно это тот случай, когда вы решаете использовать доменный подход.Эта «модель предметной области» содержит данные, а также бизнес-логику (основную логику вашей программы) и обычно не зависит от уровня представления.Уровень представления обычно вызывает бизнес-уровень на определенном «событии» (нажатие кнопки и т. Д.) Для считывания данных или записи данных на уровень данных.Уровень данных также может иметь свою собственную модель, которая обычно связана с базой данных.Он часто содержит набор классов сущностей, а также объектов доступа к данным (DAO).
Вопрос: как это вписывается в концепцию MVC?
Ответ -> Это не«т!
Ну, это так, но не полностью.
Это потому, что MVC - это подход, разработанный в конце 1970-х для языка программирования Smalltalk-80.В то время графические интерфейсы и персональные компьютеры были довольно редки, а всемирная паутина даже не была изобретена!Большинство современных языков программирования и IDE были разработаны в 1990-х годах.
В то время компьютеры и пользовательские интерфейсы полностью отличались от тех, что были в 1970-х годах.
Об этом следует помнить, когда говорите о MVC.
Мартин Фаулер написал очень хорошую статью о MVC, MVP и современных графических интерфейсах.