Рефакторинг устаревшего приложения WebForms для лучшего разделения проблем
Т.е. MVP по-прежнему является следующим лучшим выбором, когда MVC не вариант?
Я решил спросить об этом здесь, так как уверен, что есть такие, как я, которые не могут позволить себе роскошь участвовать в проекте "зеленого поля" и хотят реорганизовать пользовательский интерфейс веб-форм для лучшего отделения презентации от бизнес-объектов.,
Я работаю над унаследованным приложением, которому поручено добавлять относительно небольшие дополнительные требования, улучшения и исправления ошибок.
Часть приложения, которую я здесь рассматриваю, может быть охарактеризована как пользовательский интерфейс для набора операций CRUD над бизнес-объектами, которые сохраняются в реляционной базе данных.
Существующий пользовательский интерфейс использует элемент управления MultiView для навигации между редактированием связанных бизнес-объектов (однозначные ассоциации или одно-многие / parent-child). Да, все верно - все на одной странице. К сожалению, UserControls очень редко используются, поэтому разметка и выделение кода занимают сотни строк.
В каждом представлении FormView управляет CRUD для бизнес-объектов через различные ObjectDataSources. В ItemTemplate каждого FormView различные серверные элементы управления привязывают данные к полям или методам в ObjectDataSource.
Я хотел бы ввести больше разделения проблем и вытащить часть кода из кодовой страницы.
Мое исследование пока предлагает мне, что я мог бы рассмотреть:
Используйте вкус Model View Presenter; более конкретно - используйте ObjectContainerDataSource из фабрики программного обеспечения веб-клиента, чтобы упростить взаимодействие между текущим пользовательским интерфейсом и набором новых классов Presenter.
Сборка заново с нуля с MVC-фреймворком (не вариант).
Оставьте хорошо в покое; шаблон MVP оправдан, только если мне нужно повторно использовать презентацию в различных сценариях пользовательского интерфейса?
Если я соглашусь с (3), я все еще хотел бы знать, как начать рефакторинг в направлении лучшего разделения представления.
Чтобы ты делал? любые другие идеи с благодарностью получили...
Вот еще немного информации для тех, кто заинтересован:
Область находится в области фармацевтических исследований, но это довольно неактуально, и вы можете рассматривать ее как довольно типичное направление деятельности - пользовательскую конфигурацию семейства параметров, которые формируют условия работы другой части приложения.
Уровень бизнес-объектов уже построен очень согласованным образом. Хотя мне это может не нравиться, я не могу оправдать его изменение. Каждый объект является собственным репозиторием / объектом доступа к данным, в котором есть статические методы для "получения по идентификатору" и "получения списка по критерию". Где возможно, общие операции реализованы в абстрактном базовом классе. Каждый бизнес-объект делегирует работу по доступу к данным уровню доступа к данным, который использует механизмы фабрики провайдеров ADO.NET 2.0, чтобы оставаться относительно абстрагированным от конкретного провайдера. В этом отношении он имеет много общего с любым приложением, которое использует блок приложения доступа к данным из библиотеки Microsoft Enterprise.
Существуют довольно исчерпывающие интеграционные тесты, написанные на NUnit, которые устанавливают тестовую базу данных с нуля, поэтому для их запуска требуются целые годы, но, по крайней мере, они проверяют, что все работает как надо (в какой-то момент в прошлом, во всяком случае;-). Практически нет действительного модульного тестирования на месте (пока).
2 ответа
WebForms теперь имеет новые усилия в виде проекта ASP.NET Web Forms MVP
"... в ASP.NET Web Forms все еще есть множество неоспоримых преимуществ.
Проект ASP.NET Web Forms MVP - это... подход, который облегчает разделение проблем и тестируемость, в то же время поддерживая быструю разработку, для создания которой были созданы веб-формы ".
У Роба Конери есть опасения, что это может быть напрасной тратой времени и ненужным отвлечением сейчас, когда у нас есть MVC, но на этом этапе я все еще думаю, что исходный код стоит посмотреть...
http://haacked.com/archive/2006/08/09/ASP.NETSupervisingControllerModelViewPresenterFromSchematicToUnitTestsToCode.aspx имеет хороший пример выполнения MVP с веб-формами. Преимущество состоит не только в том, что ваш пользовательский интерфейс отделен от BL - реальное преимущество заключается в том, что вы можете писать тесты для кода.