MVC и Java по сравнению с более строгими языками MVC - PullRequest
5 голосов
/ 21 марта 2009

Мне сказали, что Java не лучший выбор для следования архитектуре MVC. Я полагаю, что видел несколько решений для фреймворка Java, чтобы облегчить эту проблему. Тем не менее, я немного запутался, почему это так. Более конкретно, почему попытка Java MVC часто высмеивается как "подражательный" подход. Я родом из ObjC (конечно, с Cocoa) и хотел бы услышать от опытных программистов о том, почему MVC с Java, как говорят, терпят неудачу.

Цените это!

Ответы [ 4 ]

10 голосов
/ 21 марта 2009

Вы говорите, что пришли из Какао, поэтому я предполагаю, что вы не говорите о MVC веб-фреймворка. Большинство веб-фреймворков, в которых говорится, что они используют MVC, на самом деле используют другой шаблон, называемый Front Controller, это немного другая история, чем в обычном MVC, потому что для этого достаточно много работы. Следовательно, все инфраструктуры MVC в веб-мире, первоначально MVC, были образцом для оконных приложений. Для этих приложений вы можете заставить MVC работать без фреймворка.

MVC - это шаблон, который может быть реализован на любом объектно-ориентированном языке. Там нет причин, почему вы не можете сделать это на Java. Единственная причина, по которой я могу подумать, почему люди называют MVC на Java подходом «подражателей», заключается в том, что библиотеки пользовательского интерфейса на Java, такие как Swing, на самом деле не требуют от вас использования MVC. Они просто дают вам инструменты для реализации View. Вам придется самостоятельно создавать классы контроллеров и моделей.

Дискуссии о том, что такое «настоящий MVC», обычно не всегда конструктивны. MVC - это шаблон, разработанный для smalltalk около 30 лет назад. Ни одна из реализаций, которые используются в настоящее время, больше не являются одинаковыми, многие реализации являются улучшениями. У вас есть разные варианты, называемые MVP, MVVM, Document-View и т. Д. И все они в некоторых случаях полезны. Важная вещь, которую следует отнять, - это хорошая идея отделить логику вашего пользовательского интерфейса от логики вашего приложения. Java может сделать это, как и большинство других языков. Люди, утверждающие иначе, вероятно, просто боятся смотреть за пределы языка, который им удобен.

5 голосов
/ 21 марта 2009

хотел бы услышать от опытных программисты о том, почему MVC с Java является сказал, что не хватает.

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

У вас нет , чтобы использовать связанные с MVC классы в Какао только для написания приложения Какао. Приятно, что они есть, и что в инструментах (таких как Interface Builder) есть всякая отличная поддержка для их использования, и, вероятно, очень мало случаев, когда вы не будете использовать их, но В языке Objective-C нет ничего фундаментального, что делает реализацию MVC «лучше», чем реализация MVC, написанная на Java. Кроме того, так же, как инфраструктуры Какао предоставляют всевозможную отличную поддержку MVC с различными классами Controller и View, существует множество хороших инфраструктур для Java, которые обеспечивают поддержку реализации MVC.

5 голосов
/ 21 марта 2009

По своей сути MVC - это модель программирования. Я считаю, что это не зависит от платформы и языка. Раньше я следовал принципам MVC в C ++, поэтому я не уверен, почему любой язык будет считаться «несоответствующим» в отношении следования этим принципам. По общему признанию, я - человек .NET в эти дни, но я думаю, что с небольшим усилием они могли бы быть применены к Java. Смотрите Java Model-View Controller для некоторых идей.

3 голосов
/ 21 марта 2009

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

Динамические языки позволяют легко избежать зависимости между M, V и C, которая является одной из целей шаблона. Например, в Python вы можете просто передать объекты вашей модели в представление без представления, требующего зависимости от типа модели, оно просто заботится о том, чтобы передавался любой тип с такими же атрибутами. Как только вы начнете использовать язык шаблонов в представлениях, как в Django, он даже не вызывает ошибок скрипта, когда атрибут не существует.

Чтобы избежать этой зависимости в строго типизированном языке, вы часто начинаете передавать словари со строковыми литералами в качестве ключей, то есть большинство преимуществ языков со строгим типом теряется (т. Е. Ваш компилятор не скажет, что вы назвали ключ «person», а затем попытаться найти его с помощью ключа «person», это будет обнаружено во время выполнения)

Кроме того, учитывая, что шаблон MVC пригоден для тестирования, позволяя тестировать M, V и C по отдельности, использование строго типизированного скомпилированного языка дает меньше преимуществ, поскольку тесты могут использоваться для проверки правильности работы приложения. ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...