Является ли модульное тестирование основной целью MVC Pattern?

14

Недавно в интервью один из вопросов был «Почему мы используем MVC?» Я только что ответил, что это намного ближе к тому, как много систем реального мира! Объяснил преимущества, которые он имеет, когда дело доходит до обслуживания, масштабируемости и т. Д. Но они не были убеждены и, наконец, сказали мне, что MVC используется в основном, поскольку он «позволяет легко выполнять модульное тестирование».

Хотя я знаю, что это правильная точка зрения, я все еще сомневаюсь, что это главная причина, потому что (i) даже если я решу не писать модульные тестовые случаи, MVC является вероятным выбором (ii) во многих системах с графическим интерфейсом, где есть модульные тестовые случаи, нет следуйте MVC.

Итак, вопрос «Является ли модульное тестирование основной целью MVC Pattern?»

РЕДАКТИРОВАТЬ: я предполагаю, что они могли бы упомянуть простоту разработки на основе тестирования / написания тестовых случаев NUnit. Это потому, что мы можем написать тестовые случаи для модели (при условии, что представление точно отражает изменения состояния модели) - пожалуйста, исправьте меня, если я ошибаюсь.

WinW
источник
11
Вы не прошли собеседование, не так ли? Если нет, то тебе повезло. Я не буду присоединяться к компании, у которой с самого начала очень неправильное мышление. :) Модульное тестирование Определенно не основная задача. Это может помочь модульному тестированию, потому что все проблемы разделены, но определенно не основная цель.
Руди
4
Помните, что интервью работает в обе стороны. Вы исследуете их так же, как они проверяют вас. Вы только что получили красный флаг: не ходите в эту компанию. Они понятия не имеют, но, что еще хуже, думают, что они не понимают этого, поэтому нет надежды на улучшение. Если вы решите пойти в компанию, вы столкнетесь со многими кафкианскими ситуациями.
Deadalnix
@Rudy Нет, я не сдал: P, это был центр разработки ведущего инвестиционного банка. Также ребята выглядели хорошо и очень достоверно с другими вопросами, и именно поэтому я запутался с этим.
WinW
@deadalnix, да правда .. чувствую то же самое после того, как я вижу ответы здесь. Но я не был уверен, прежде чем разместить его здесь.
WinW
Я полностью согласен с Deadalnix. Не ходите в эту компанию.
Руди

Ответы:

33

Основной целью было бы «разделение интересов», поскольку модель, представление и контроллер имеют разные обязанности.

Автор оригинала Xerox PARC бумаги говорится , что:

Основной целью MVC является преодоление разрыва между ментальной моделью пользователя и цифровой моделью, которая существует в компьютере.

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

Винит Рейнольдс
источник
2
Я бы сказал, что основными целями являются включение метафоры прямого манипулирования (это в основном то, о чем говорится в цитате) и расширение прав и возможностей пользователей (изначально предполагалось, что только модели будут написаны программистами, а представления и контроллеры - конечными пользователями).
Йорг Миттаг
14

На мой взгляд, ответом фирмы является «нет». Возможно, это было основным преимуществом, которое наблюдалось в этой конкретной организации, но я бы не назвал это «основной целью».

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

С другой стороны, можно сказать, что практически любой шаблон (исключая такие вещи, как Singleton) облегчает модульное тестирование, поскольку они чаще всего способствуют разъединению - но является ли это их «главной целью»? Едва.

MCHL
источник
12

MVC (так же, как и большинство известных шаблонов проектирования) существовал еще до того, как стало известно о модульном тестировании. Книга GoF была опубликована в 1994 году - и они только документировали образцы, которые использовались в течение многих лет (если не десятилетий) прежде. (И в нем нет упоминания о модульном тестировании.) Что касается модульного тестирования, я не могу определить точное время, когда оно стало «общедоступным» - я лично читал об этом в статьях, связанных с экстремальным программированием, и в первой книге по XP вышел в 1999 году.

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

Петер Тёрёк
источник
Ссылка на временную шкалу является хорошим упоминанием - логически поддерживает аргумент.
WinW
Кажется, есть проблема с датой samll. heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html говорит, что «MVC был задуман в 1978 году как конструктивное решение конкретной проблемы». Не беспокойтесь ... Ваш аргумент остается верным - MVC был там задолго до начала модульного тестирования.
WinW
Модульное тестирование проводится примерно с 1980-х годов. Тогда я начинал свою карьеру, и у нас были модульные тесты по некоторым проектам, над которыми я работал (и тогда это не казалось новой идеей). У нас просто не было готовых фреймворков, которые есть сейчас.
GreenMatt
2
@ GreenMatt, я знаю, что модульное тестирование не было изобретено Кентом Беком, просто использовалось повторно :-) Но AFAIK было относительно неизвестно до того, как XP и Agile начали его широко распространять.
Петер Тёрёк
@ Péter Török: Я помню 1) написание собственного простого кода для тестирования отдельных функций еще в колледже (для меня в начале-середине 1980-х), и что я получил идею от кого-то другого; 2) просмотр изображений и чтение статей о модели водопада в 80-х или 90-х годах на этапе под названием «Кодирование и модульное тестирование» (а не просто «Кодирование»). (Извините, я не помню, где, поэтому не могу предоставить цитаты.) Таким образом, модульное тестирование уже давно и развивается .
GreenMatt
2

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

Роберт Антон Риз
источник
0

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

ASP.NET MVC обладает определенными возможностями, которые делают его лучшим выбором, если вам нужно одно или несколько из следующих:

Высокий уровень контроля над сгенерированным HTML : в отличие от веб-форм, представления в ASP.NET MVC отображают HTML точно так, как вы им говорите. В последнее время веб-формы были улучшены в этой области, но все еще не имеют уровня контроля, который имеет MVC.

Более простое модульное тестирование : с ASP.NET MVC очень легко следовать шаблонам тестирования, таким как разработка через тестирование (TDD). Из-за сложного жизненного цикла событий в веб-формах, в дополнение к основанной на элементах управления среде, TDD намного проще с MVC.

Разделение интересов : это означает, что все аспекты системы четко отделены друг от друга. Из-за шаблона, который он реализует, приложение MVC разделено на дискретные и слабо связанные части (модель, представления и контроллеры), что упрощает обслуживание.

Некоторые из других преимуществ:

• Сам шаблон MVC упрощает управление сложностью, четко разделяя функциональные возможности приложения на три основные части: модель, представление и контроллер.

• Веб-приложения ASP.NET MVC не используют состояние просмотра или формы на основе сервера. Это делает инфраструктуру MVC идеальной для разработчиков, которым нужен полный контроль над поведением приложения. Состояние просмотра может стать очень большим, что является проблемой для таких устройств, как смартфоны, работающие в медленных сетях (передача всей этой информации может быть очень медленной). На странице веб-форм вы можете иметь только одну на страницу. Это довольно серьезное ограничение. В MVC такого ограничения нет, то есть вы можете иметь столько элементов, сколько захотите.

• ASP.NET MVC обеспечивает улучшенную поддержку разработки через тестирование (TDD).

• ASP.NET MVC хорошо работает для веб-приложений, которые поддерживаются большими группами разработчиков, и для веб-дизайнеров, которым необходим высокий уровень контроля над HTML. ASP.NET MVC Обработка запросов

Арвинд Кумар
источник