2010-06-17 2 views
1

У нас есть два веб-сайта, которые имеют только различие в дизайне (разные изображения, стили, макеты..etc), но веб-структура файлов и кода cs такая же, поэтому мы хотим упростить ее обслуживание ...Лучший способ объединить два одинаковых веб-сайта ASP.NET?

фактическая структура будет:

DefaultA.aspx 
    DefaultA.aspx.cs 
DefaultB.aspx 
    DefaultB.aspx.cs 
LoginA.aspx 
    LoginA.aspx.cs 
LoginB.aspx 
    LoginB.aspx.cs 

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

Еще один делится cs (оба aspx наследуют и используют sa me cs), но мы никогда не делали или не видели его на каком-либо веб-сайте, поэтому мы задаемся вопросом, есть ли у него хороший подход ...

Как вы думаете? Любой другой способ лучше с точки зрения производительности и простоты разработки?

+0

Звучит как вопрос о брендинге, конфигурация должна обрабатываться как можно больше во время сборки. Допустим, ваша сборка работает с пакетными файлами, второй аргумент, переданный вашему barchfile, может быть брендом, например CustomerA, CustomerB, и вы копируете изображения, CSS и конфигурацию. Все, что не зависит от домена клиента, который вы обрабатываете во время сборки. Затем во время настройки вы создаете пользовательские действия в настройках, которые относятся к домену и серверам клиента. Как только это будет сделано, если что-то останется, это то, что вы обрабатываете во время выполнения из бизнес-логики внутри вашего приложения. – GenEric35

ответ

0

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

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

4

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

+0

Поскольку мы хотели бы иметь возможность модифицировать веб-сайт в режиме разработки, а не делать все это динамически ... слишком много абстракции и головных болей ... (На предмет его изменения одно изображение или элемент видимости, а другой - все макет страницы : S) – VSP

+2

@ ase69s - Это действительно способ сделать это. Это совсем не абстракция, и если сайты хорошо выложены, это не должно быть так сложно. Изображения могут быть изменены с помощью CSS ... – Paddy

2

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

Кроме того, я бы также предположил, что у вас есть каждая страница кода, наследуемая от пользовательского класса, который наследует себя от класса Page. Напишите код OnPreInit, чтобы установить правильную тему в этом пользовательском классе, поэтому вам нужно только написать ее один раз. Все ваши другие страницы наследуются от этого класса и пользуются динамической настройкой темы. Кстати, вы также можете использовать ту же технику для динамического набора Master pages.

Grz, Крис.

+0

Разве это не похоже на вторую идею, которую мы опубликовали только с большим количеством проверок времени выполнения и большей абстракции? – VSP

+0

Нет, вы не возитесь с обменом файлами codebehind. Вы просто используете другую тему поверх всех страниц в зависимости от ваших критериев. – XIII

1

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

Я нашел, что лучший подход заключался в том, чтобы определить общие элементы управления или страницы, а затем перенести их код позади в классы, которые хранились в отдельной сборке. Это на самом деле очень просто, вам просто нужно воссоздать код за классом как новый класс внутри вашей сборки и убедиться, что наследующая страница/элемент управления ссылается на assembly.type по мере необходимости. Как только это будет завершено, ваш существующий сайт будет работать по-прежнему, но вы также разделили бы свою логику управления с уровня пользовательского интерфейса.

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

+0

Хотя вы закончили с большим количеством файлов и прокси-кода, его можно было бы считать более правильной версией нашего окончательного решения. – VSP

0

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

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

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

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

Смежные вопросы