У меня 2 с половиной года опыта работы в VB.Net, в основном самоучка, поэтому, пожалуйста, потерпите меня, если я все еще выгляжу довольно нубистски и не знаю некоторых основ. Я бы порекомендовал вам взять чашку чая, прежде чем начать, так как кажется, что он довольно длинный ...
В настоящее время у меня довольно большое приложение (веб-сайт VB.Net), содержащее более 15000 строк кода при последнем подсчете. Он не занимается розничной торговлей или чем-то особенно сложным в этом роде - это буквально просто оптовый веб-сайт для просмотра с интерфейсом администратора, системой управления каталогами / каталогами и системой просмотра страниц.
Я не очень много знаю о том, как .Net-приложения работают в фоновом режиме - независимо от того, загружены ли они все в одном потоке, или у каждого свой поток ... Я просто знаю, как их кодировать, или по крайней мере нравится думать, что я делаю ...: -)
В основном мое приложение настроено следующим образом:
- Существует две области: клиентская область и администрация.
- Основной частью клиентского интерфейса является Каталог. MasterPage загрузит список продуктов, но это все, и это является общим для всех клиентских веб-страниц.
- Я склонен работать только с одной или несколькими частями приложения за один раз до загрузки изменений. Так, например, я могу изменить иерархию Каталога и изменить страницу Каталога, чтобы она соответствовала изменению иерархии, оставляя все остальное в покое.
- База данных просмотра страниц становится действительно достаточно большой, и поэтому при первом запросе приложения она становится довольно медленной из-за того, как она работает.
- Тайм-аут приложения установлен на 5 минут - не знаю, как его изменить, я даже пытался задать этот вопрос здесь и, кажется, помню, что решение было довольно сложным, и мне рекомендовали не менять его, но если клиент запрашивает приложение через 5 минут после просмотра последней страницы, после чего оно перезагрузит приложение с нуля. Это означает, что загрузка страницы очень медленная, если она превышает 5 минут бездействия.
Я не уверен, нужно ли это учитывать, чтобы определить, как лучше всего разделить приложение, если оно вообще есть, но каждая часть системы каталогов настроена следующим образом:
- Класс Manager на верхнем уровне, который используется интерфейсом администратора для добавления, редактирования и удаления элементов указанного типа, а интерфейс клиента - для получения списка элементов указанного типа. Например, «RangeManager» будет содержать список «Диапазонов» продукта и будет использоваться для взаимодействия с ними из клиентского интерфейса.
- Класс Item, например Range, который содержит список атрибутов. Например, Имя, Описание, Видимый, Создан, Создан и т. Д. Форма для добавления / редактирования циклически повторяет их, чтобы отобразить соответствующие элементы управления для администратора. Например, флажок для BooleanAttribute.
- Класс Attribute, который может иметь тип StringAttribute, BooleanAttribute, IntegerAttribute и т. Д. Существуют также пользовательские атрибуты (не только типы данных), такие как RangeAttribute, UserAttribute и так далее. Им дается поле данных, которое используется для получения части данных, специфичных для элемента, в котором они содержатся, когда он запрашивается впервые. По сути, Предмету присваивается DataRow, который сохраняется и доступен Атрибутам только при первом запросе.
- Когда запрашивается один элемент у определенного менеджера, менеджер зацикливает все элементы в базе данных и создает новый экземпляр класса элементов. Например, когда Range запрашивается из RangeManager, RangeManager будет циклически проходить по всем DataRows в таблице Ranges и создавать новый экземпляр Range для каждого из них. Как указано выше, он просто создает новый экземпляр с DataRow, а не загружает все данные в него тут же. Сами атрибуты извлекают соответствующие данные из DataRow по мере их первого запроса.
Мне кажется немного глупым перекомпилировать и загружать все приложение каждый раз, когда я исправляю небольшую ошибку или орфографическую ошибку для слова, которое находится в коде позади (например, если я установил текст Ярлык динамически). Исправление / изменение на странице Каталога, как оно есть сейчас, может означать, что клиент, пытающийся просмотреть страницу Контакта, которая никак не связана со страницей Каталога, за исключением того, что имеет ту же MasterPage, не может этого сделать, потому что DLL загружается.
По сути, мой вопрос, учитывая мою текущую ситуацию, как бы люди предложили мне изменить архитектуру приложения, разделив его на несколько приложений? Я имею в виду, будет ли это просто клиент / администратор, или клиент / администратор и просмотр страниц, или каким-то другим способом? Или нет вообще? Есть ли другие альтернативы, о которых я не упомянул здесь? Могут ли здесь пригодиться веб-сервисы? Как разделить сам каталог в другое приложение и просто сделать так, чтобы главная страница для всех остальных страниц использовала веб-сервис, чтобы получить названия продуктов для списка в левой части? Я просто слишком усложняю вещи? Судя по длине этого вопроса, я, вероятно, задаюсь им, и это будет не первый раз ... Я старался быть коротким, но всегда терплю неудачу ...: -)
Заранее большое спасибо, и извините, если я вас совсем запутал!
С уважением,
Richard