“наследование” ASP.NET сайты MVC из общего шаблонного приложения? (коллективная аренда)

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

13
задан Justin Grant 30 September 2009 в 05:51
поделиться

4 ответа

1
ответ дан 2 December 2019 в 00:18
поделиться

Обновление: теперь это исправлено в r274 ; вы должны использовать:

[ProtoMember(12, DataFormat = DataFormat.TwosComplement)]
public MyEnum MyValue {get;set;}

В конечном итоге буферы протокола подключаются формат не предоставляет возможности для перечислений [Flags] - он применяет значения перечисления к сдержанный набор. Я мог бы легко допустить это, но:

  • В этом случае мне, вероятно, придется отключить сопоставления перечислений или сделать много уродливых битов. сопоставление работы
  • это не будет строго совместимо

Более простой способ сделать это может заключаться в использовании прокладки в вашем коде:

public MyEnum MyValue {get;set;}
[ProtoMember(12)]
private int MyValueWire {
    get {return (int)MyValue;}
    set {MyValue = (MyEnum)value;}
}

Другой альтернативой было бы добавить флаг, который работает, как указано выше, на вашем от имени; обрабатывая его как int, а не как перечисление.

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

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

Данные, собранные во время процесса приложения, сохраняются в базе данных в виде сериализованных объектов модели xml, которые затем можно извлечь и удалить -сериализуется, когда приложение завершено, и передается в любом формате в любую систему, которую обслуживающий персонал использует для обработки приложений.

Следствием этого является то, что у нас есть структура проекта, состоящая из базовой dll, содержащей аннотацию верхнего уровня классы интерфейсы и служебные классы, а также html-помощники, фильтры действий и т. д. Затем у нас есть проекты mvc, которые содержат конкретные реализации базовых контроллеров, моделей и т. д., а также представления и мастер-страницы.

Самое сложное - это совместное использование представлений, и я не думаю, что мы еще как следует отсортировали это. Хотя с MVC 2.0, содержащим области, я думаю, что это станет меньшей проблемой, но я еще не играл с ней хорошо. (см. сообщение Скотта Гу по версии 2.0: http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx ) Хотя с MVC 2.0, содержащим области, я думаю, что это станет меньшей проблемой, но я еще не играл с ней хорошо. (см. сообщение Скотта Гу по версии 2.0: http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx ) Хотя с MVC 2.0, содержащим области, я думаю, что это станет меньшей проблемой, но я еще не играл с ней хорошо. (см. сообщение Скотта Гу по версии 2.0: http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx ) Одна вещь, которую я использовал POCed, которая выглядит так, как будто она будет работать, - это использование базового проекта MVC для хранения общих представлений, а затем расширение механизма представления по умолчанию для поиска этого проекта на веб-сервере при поиске представления для рендеринга (что довольно легко сделать. ). Однако области - гораздо более приятное решение.

Что касается управления версиями, мы используем svn, и я думаю, вы разумно беспокоитесь о ветвях. Это не то, с чем нам еще приходилось иметь дело, но мы, вероятно, собираемся использовать git, так как он, кажется, делает процесс ветвления и слияния гораздо менее болезненным.

Не уверен, сильно ли это вам помогает, но я бы определенно рекомендовал иметь в виду абстрактные контроллеры и модели, а также посмотреть, как вы можете использовать html-помощники и частичные представления для группировки схожих функций.

2
ответ дан 2 December 2019 в 00:18
поделиться

Один из способов сделать это - использовать ветвление в системе управления версиями.

Основная ветвь предназначена для общих функций.

1
ответ дан 2 December 2019 в 00:18
поделиться

Вот что мы делаем, и в настоящее время это работает довольно хорошо примерно для 8 сайтов.

  • Определите основной проект MVC для ваших контроллеров, моделей представления, HttpApplication, маршрутов и т. Д. Это скомпилируется в DLL и скомпрометирует большую часть вашего сайта.

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

  • Для каждого клиента создайте любые настраиваемые контроллеры, маршруты и т. Д., Которые вам понадобятся в проекте, который компилируется в другую dll.

  • Также для каждого клиента воссоздайте любые представления, сценарии и изображения, которые вы захотите использовать.

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

Второй способ заставить все работать - это заставить ваше основное приложение загружать маршруты, контроллеры и т. Д. Из вашей клиентской сборки. Для этого я использую Managed Extensibility Framework (MEF), чтобы предоставить единственный метод Register. Вызов этого метода в моем коде сборки клиента регистрирует маршруты и любые другие потребности клиента.

Вот общий вид того, как выглядит структура папок моего сайта, при этом SiteContent сначала проверяется на наличие представлений:

  - AppContent
  - AppContent/Static
  - AppContent/Static/Images
  - AppContent/Static/Scripts
  - AppContent/Static/Styles
  - AppContent/Views
  - AppContent/Views/Shared

  - SiteContent
  - SiteContent/Static
  - SiteContent/Static/Images
  - SiteContent/Static/Scripts
  - SiteContent/Static/Styles
  - SiteContent/Views
  - SiteContent/Views/Shared

  - web.config
  - Global.asax

У меня есть помощники, такие как SiteImage и AppImage, для использования в моих представлениях. Кроме того, я заставляю каждый из моих клиентских сайтов использовать определенные имена для своих главных страниц, которые я никогда не определяю в своих значениях по умолчанию для AppContent.

Я понимаю, что это приблизительный обзор, но сейчас он работает для нас достаточно хорошо.

11
ответ дан 2 December 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: