2010-01-05 2 views
4

Простой вопрос: в MVC, нормально ли для одной модели взаимодействовать с другим? Например, с моделью Auth ... может ли она взаимодействовать с моделью пользователя - или есть лучший способ сделать это?MVC - все в порядке, чтобы бизнес-модели знали друг друга?

Должен ли средний человек быть контроллером?

ответ

3

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

+1

«лучше обслуживается моделью для общения», что это значит? спасибо ... еще новичок в этом – johnnietheblack

+1

Он, вероятно, означает, что модели, которые напрямую общаются друг с другом, должны иметь прямую связь друг с другом. Как одна модель, являющаяся компонентом другого. Совершенно несвязанные модели лучше всего использовать с помощью медиатора, такого как контроллер. –

+0

@julson ... так что в моем примере класса аутентификации, говорящего с классом User ... не подходит эта философия? – johnnietheblack

3

Разнообразные классы моделей взаимодействуют. Большинство сложных объектов не являются полностью автономными. Как и в случае с любым хорошим кодом OO, классы должны использовать общедоступные методы и не подвергать их реализации друг другу, но помимо этого все хорошо.

+0

Что вы подразумеваете под «раскрытием их реализации»? благодаря! – johnnietheblack

+0

@johnnietheblack: Если ClassA вызывает ClassB, ClassA должен знать, что должен делать ClassB, но не совсем точно, как он это делает. Если, например, кто-то модифицирует внутреннюю переменную ClassB из Hashtable в HashMap или TreeMap по какой-либо причине, ClassA не должен быть затронут вообще. С практической точки зрения это означает использование открытых геттеров и сеттеров для частных атрибутов вместо прямого доступа к защищенным или публичным атрибутам. ClassB должен контролировать изменения своих атрибутов. –

2

Они могут знать друг о друге и использовать функции друг друга. Часто лучшие практики будут держать это в одну сторону, но не всегда. Как и dj_segfault, это взаимодействие должно осуществляться через общедоступные методы. Обязательно прочитайте Dependency injection; изменение внутренних действий одного класса не должно нарушать другого, если все общедоступные методы все еще ведут себя одинаково.

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