2016-07-26 4 views
1

Я спросил у нескольких разработчиков и каждый раз получал разные ответы.Где находятся службы в MVC?

Предположим, что я работаю в среде MVC, и у меня есть класс под названием validator. Скажем, у этого объекта есть куча методов, которые могут быть использованы, чтобы сообщить вам, действительно ли номер электронной почты или номер телефона действителен, или если данное значение действительно содержит контент.

Скажите, что я хочу сделать эту службу собственностью модели, которую я создаю. Я могу просто ввести его в метод построения моего модельного класса. Однако, где эта услуга входит в состав MVC? Это модель?

Куда хранить файл? С моделями? В его собственном каталоге, возможно, называется services?

+0

Добро пожаловать в переполнение стека! Я отредактировал ваш вопрос, насколько я мог догадаться о вашей проблеме. Однако добавьте код и описание, чтобы увидеть больше людей со знанием предмета. Измените конкретное сообщение об ошибке, с которым вы сталкиваетесь, в случае необходимости определить конкретную проблему. Удачи! – manetsus

+0

Нет, задача классов моделей состоит только в обработке (в основном постоянной) структуры данных, проверка является одним из самых ясных заданий контроллера. Конечно, валидатор может совершать вызовы модели, и в большинстве случаев это делается, но их место находится на стороне контроллера. Если в фактически используемой структуре нет конкретной поддержки, то в вашем случае я буду использовать их в качестве вспомогательных классов для валидатора. Еще одно небольшое замечание (извините, жаль PHP программистов): глубоко изучить OOP и архитектуру программного обеспечения, возможно, PHP не самый лучший вариант. Java является, EJB + JSF является лучшим. – peterh

+1

Ewww, Java. Второе, что вы описываете, - это регулятор жира. Модели должны содержать бизнес-логику, включая проверку, если я правильно понимаю. Это не очень СУХОЙ, чтобы повторять логику в контроллерах и, похоже, побеждает цель MVC. – Allenph

ответ

0

Это явно часть слоя модели, поскольку в нем содержится бизнес-логика. Мои валидаторы хранятся в/models/validators. И может использоваться внутри форм/API/etc ...

+0

Точный, хотя и короткий. –

0

Это зависит от того, что несет ответственность служба. В вашем приложении могут быть разные типы услуг. например

  • Служба, которая обрабатывает ввод пользователя и возвращает экземпляр класса модели, который будет выводить то, что будет отображаться в представлении (вероятно, должно жить в слое контроллера);
  • услуга перевода денег между счетами в банке приложением (должен жить в модельном слое) и т.д.

Допустим, я работаю в рамках MVC и у меня есть класс называется валидатор , Скажем, у этого объекта есть куча методов, которые могут быть использованы, чтобы сообщить вам, действительно ли номер электронной почты или номер телефона действителен, или если данное значение действительно содержит контент.

Прежде всего. Вам не нужны эти супермощные классы, так как их трудно поддерживать. Они нарушают принцип единой ответственности (см. https://en.wikipedia.org/wiki/Single_responsibility_principle).

Валидаторы могут выполнять различные функции в своем приложении.

  • Они могут просто помочь пользователю сообщить, имеет ли «данное значение фактическое содержание в нем». Они могут идти в слое контроллера.
  • Они также могут применять бизнес-правила, например, говоря, что «номер телефона действителен». Они должны идти в слое модели.

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

Возможно, лучше сначала проверить, а затем ввести реальные зависимости класса, такие как номер телефона и адрес электронной почты. ООП - это абстрагирование концепций реальной жизни: у человека есть действительный номер телефона и действительный адрес электронной почты, а не валидатор.

Куда хранить файл? С моделями? В его собственном каталоге, возможно, называемом сервисом?

Услуги должны быть созданы в их собственных пространствах имен, таких как «Имя_проекта \ Модель \ Сервис» и «Имя_проекта \ Контроллер \ Сервис».

Кроме того, существует множество статей и нитей, покрывающих провалы MVC для построения целых приложений (например, https://softwareengineering.stackexchange.com/questions/207620/what-are-the-downfalls-of-mvc), которые стоит прочитать.

1

Я думаю, что у меня другое мнение [к сожалению, каламбур не был предназначен] того, что модель находится в mvc, но службы обязательно должны идти в слое модели.

Во-первых, модель не должна быть классом. Модель a модель, приложение. Приложение смоделировано в разных вещах (содержится в слое модели): Объекты, Mappers, Services.

Для Exemple, что может быть иерархия файлов, представляющая эту концепцию:

 
application 
    Controller 
    Model 
     Entities 
     Mappers 
     Services 
    View 

Скажите, что я хочу, чтобы сделать эту услугу свойство модели, я создаю. Я могу просто ввести его в метод построения моего модельного класса. Однако, где эта услуга входит в состав MVC? Это модель?

Я буду считать моделью, как вы говорите, это действительно Entity, объект, представляющий концепцию домена. В этом случае услуга должна быть не быть собственностью объекта. Службы должны использоваться контроллерами, чтобы делать то, что они вызывают, затем Mappers будут создавать ваши сущности из результата того, что сделали Услуги.


Мое текущее понимание значительно исходит от this ответа, вы должны обязательно прочитать его для дальнейшего понимания.

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