Веб-приложения - объединять или разделять? - PullRequest
4 голосов
/ 30 января 2010

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

У меня есть одно веб-приложение, которое мы называем Портал.Он содержит классы аутентификации / авторизации, мастер-страницы, классы навигации / маршрутизации URL и определения тем.Он также будет содержать некоторые базовые обзоры для наших клиентов, чтобы быстро понять их статус проекта.

В следующем году мы собираемся разработать и интегрировать больше приложений с порталом.Думайте об этом как о подробных обзорах и инструментах под названием Функции A, B и C. Со временем мы будем совершенствовать эти приложения и выпускать новые версии.Эти веб-приложения должны легко вписываться в навигацию портала.Я бы хотел, чтобы они повторно использовали мастер-страницы и темы.

Как правильно настроить это решение?
Как я могу связать приложения, повторно использовать мастер-страницы и поддерживать их в обслуживании?
Как правильно поделиться определенными веб-элементами управления (ASCX)?
Мы используем TFS, возможно, какие-либо идеи ветвления / объединения?

Редактировать:
IЯ хотел бы создать его в ASP.Net WebForms, у нас больше всего опыта в этой области.Но в основном мы можем использовать все что угодно, у нас есть веб-сервер под нашим собственным контролем (если он ориентирован на Microsoft, не переключаясь на php или что-то в этом роде:))

Ответы [ 7 ]

2 голосов
/ 05 февраля 2010

What is the proper way to setup this solution?

Правильный путь ... Их так много. Я видел множество приложений и множество различных настроек (многие из которых я бы назвал "правильными"). То, что вы действительно спрашиваете, это лучший способ для вашей ситуации.

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

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

How can I tie the applications together, re-use the master pages and keep it maintainable?

Опять же ... папки - лучший вариант здесь. Папки помогут разделить каждую функцию, упрощая управление приложением.

How can I share certain webcontrols (ASCX) in a proper way?

Прежде всего, файлы ascx не являются веб-элементами управления. Это пользовательский контроль. WebControl - это класс для создания серверных элементов управления, которые находятся в отдельной сборке. Что касается пользовательских контролей, как я уже говорил выше, если вы поместите их в отдельную папку, они всегда будут в одном месте и доступны во всем приложении.

We are using TFS, perhaps any branching/merging ideas?

Здесь действительно нет ничего особенного, что вам нужно делать. В отношении ветвления вы можете выбрать много разных путей:

  • Один - создать ветку для каждого выпуска.
  • Другой способ - создать ветку для каждой новой добавляемой вами функции (в вашем случае это почти то же самое, что и первая опция).
  • Еще одна задача - создать ветку для каждого разработчика.

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

2 голосов
/ 03 февраля 2010

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

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

Итак, вопреки ответу Бриана, я бы не советовал вам делать всю вашу систему «настолько слабой, насколько это возможно», только чтобы вы делали ее настолько слабой, насколько это необходимо. ;) Слабосвязанный код может вызвать столько же проблем, сколько и тесно связанный, если вы злоупотребляете им.

См:
1. Что лучше, много маленьких сборок или одна большая сборка?
2. Конкретные недостатки многих-малых сборок?

В конце концов, только вы знаете, как сильно вы хотите сосредоточиться на каждой из «... способностей», удобстве обслуживания, расширяемости, надежности и т. Д. Так что определите свои приоритеты и цели и планируйте соответственно.

Что касается стратегий ветвления, вы можете прочитать Руководство по ветвлению TFS 2.0 , в котором есть хорошее представление о различных стратегиях ветвления - от базовых до продвинутых. Даже если вы не используете TFS, это хорошее руководство для чтения (сейчас я использую SVN). Поскольку в настоящее время я работаю в небольших командах с 1-4 разработчиками, я склонен использовать стратегию, которая находится между базовой и стандартной. Не то, чтобы я рекомендовал это для вас, но это лучше всего подходит для нашей команды.

Что касается обмена кодом между проектами. В SVN мы можем использовать « externals », что означает, что общий файл будет отображаться в нескольких папках, поэтому, когда вы изменяете одну копию и фиксируете изменение в svn, все остальные копии будут обновлены при следующем обновлении svn , Тем не менее, я не могу вспомнить, есть ли в TFS нечто подобное.

Примечание: Остерегайтесь внешних факторов в SVN ... они могут вызвать ... проблемы. ;)

Мой совет: постарайтесь не использовать как можно больше страниц aspx, ascx и master. Обычно болит гораздо больше, чем помогает. Вместо этого попробуйте использовать наследование или другие альтернативы для достижения вашей цели.

ASP.NET MVC 2.0 имеет концепцию под названием «Области», в которой вы строите подразделы приложения изолированно от остальных. Насколько я знаю, эти участки можно поддерживать в отдельных проектах от «основного» приложения. Это звучит очень похоже на то, что вы просите, так что, возможно, вам стоит посмотреть на это.

Надеюсь, это имеет смысл. ;)

1 голос
/ 09 февраля 2010

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

1 голос
/ 04 февраля 2010

Возможно, вам будет полезно взглянуть на реализацию пользовательского VirtualPathProvider . В моем последнем проекте у нас было несколько сайтов ASP.NET, которым нужно было обмениваться файлами тем (главные страницы, пользовательские элементы управления, изображения, таблицы стилей), поэтому я создал VirtualPathProvider, который позволил нам сопоставить виртуальную папку (например, / Themes) с любой физической папка на жестком диске (например, C: \ Shared \ SiteThemes).

Это не тривиально, но не займет много времени и не вызовет никаких проблем. Кстати, это был отличный способ преодолеть максимальное ограничение компонентов в WiX ... Обратите внимание, что вы не можете предварительно скомпилировать сайты, которые используют VirtualPathProvider.

1 голос
/ 30 января 2010

Я бы посоветовал сделать вашу систему как слабо связанной , насколько это возможно. По мере того, как вы добавляете больше приложений, ваш сайт становится все менее и менее надежным (поскольку ни один из компонентов не будет работать 100% времени, их объединение снизит общую надежность). Таким образом, вы должны построить свою систему для обслуживания неосновных сервисов (я считаю, например, что на домашней странице Amazon есть 100 сервисов, способствующих этому, и поэтому она построена так, чтобы быть отказоустойчивой)

Ваши API-интерфейсы между сервисами должны оставаться настолько стабильными, насколько это возможно, чтобы реализации могли меняться без нарушения связи. Вам также следует исследовать автоматизированное тестирование этого на веб-уровне (возможно, Selenium или аналогичное?), Поскольку тестирование отдельных сервисов даст вам небольшой охват в отношении общего поведения.

0 голосов
/ 09 февраля 2010

Я бы не рассматривал приложения как отдельные, а как модули всего портала.

Я бы порекомендовал вам взглянуть на MEF, так как это выглядит идеально.

http://blogs.msdn.com/hammett/archive/2009/04/23/mef-and-asp-net-mvc-sample.aspx

0 голосов
/ 08 февраля 2010

Вы можете посмотреть на использование SharePoint. Это довольно приличная платформа для доставки приложений ASP.NET, особенно если они сосуществуют в среде интрасети; это дает вам много вещей бесплатно.

Конечно, у него очень грубые локти, так сказать, так что будьте осторожны.

...