Создание приложения ASP.NET - лучшие практики
Мы создаем приложение ASP.NET и хотели бы следовать лучшим практикам. Некоторые из лучших практик:
Код на стороне сервера:
- Используйте блоки catch для ловушки и регистрации ошибок низкого уровня.
- Используйте объекты Cache для заполнения выпадающих списков и т.д., где мы не будем ожидать изменений в базовых данных/базе данных.
- В случае фреймворка регистрации ошибок вы можете отправлять оповещения по электронной почте вместе с протоколированием ошибок.
Код HTML:
- Не записывайте встроенный CSS.
- Поместите код JavaScript (если необходимо на странице) в конце страницы, если страница не нужна для действий времени загрузки.
Теперь, дойдя до сути, не могли бы вы поделиться этими точками лучшей практики, если у вас есть исчерпывающий список из них?
Ответы
Ответ 1
Некоторые из лучших практик, которые я изучил с течением времени и написаны для использования в моей компании... многие в основном применимы к WebForms, а не MVC.
- Не записывайте код .NET непосредственно в
ваша разметка ASPX (если только она не используется для
привязка данных, т.е. Evals). если ты
есть код позади, это ставит код
для страницы в нескольких местах и
делает код менее управляемым. Положил
весь код .NET в вашем коде.
- SessionPageStatePersister может использоваться совместно с ViewState
сделать ViewState полезным без
увеличение размеров страниц. Переопределение
Страница PageStatePersister с
новый SessionPageStatePersister будет
хранить все данные ViewState в памяти,
и будет хранить только зашифрованный ключ
на стороне клиента.
- Создайте базовую страницу, которую ваши страницы могут наследовать, чтобы
повторно использовать общий код между страницами.
Создайте MasterPage для своих страниц
для визуального наследования. Страницы с
совершенно разные визуальные стили должны
используйте другой MasterPage.
- Создайте перечисление имен ключей параметров страницы в каждом WebForm
которые передаются через URL-адрес, чтобы
настройка сильно типизированных параметров страницы.
Это предотвращает необходимость жесткого кодирования
строки параметров параметров страницы и их
вероятной неправильной типизации, а также
допускающий строго типизированный параметр
доступ с других страниц.
- Использовать кэш ASP.NET для частого кэширования
информацию из вашей базы данных.
Сборка (или повторное использование из другого проекта)
общий уровень кэширования, который будет
оберните кэш ASP.NET.
- Оберните объекты ViewState с помощью свойств на своих страницах, чтобы избежать
ошибки разработки в написании,
и т.д. при ссылке на элементы из
Коллекция ViewState.
- Избегайте размещения больших объектов и графиков объектов в ViewState, используйте его в основном для хранения идентификаторов или очень простых объектов DTO.
- Оберните сеанс ASP.NET с помощью SessionManager, чтобы избежать развития
ошибки при написании и т.д., когда
ссылки на объекты из сеанса.
- Широко использовать ключ/значение приложенияSettings
значения конфигурации в
web.config - оберните
Configuration.ApplicationSettings
с классом, который можно использовать для
легко получить конфигурацию
настройки без необходимости запоминать
ключи от web.config.
- Избегайте простоты установки свойств отображения в пользовательском интерфейсе
вместо этого используйте стили CSS и
классы - это сделает ваши стили
более управляемым.
- Создайте UserControls в своем приложении, чтобы повторно использовать общие
Пользовательский интерфейс
страницы. Например, если выпадаете
список, содержащий коллекцию
категории будут использоваться во многих
места на сайте - создать
Элемент управления CategoryPicker, который будет содержать данные
свяжите себя, когда страница загружена.
- Используйте свойства в UserControls для настройки таких функций, как
значения по умолчанию, разные дисплеи
между страницами и т.д. Тип значения
свойства могут быть определены на вашем
UserControls, а затем
Разметка ASP.NET с использованием уровня класса
свойств в UserControls.
- Использовать элементы управления проверки ASP.NET для выполнения простых
проверки или использования
CustomValidator для выполнения сложных
валидация.
- Создайте страницу обработки ошибок, которую можно перенаправить, когда
необработанное исключение происходит внутри
Ваш сайт. Перенаправление может
происходят через событие Page_Error в
вашей страницы, Application_Error
событие в вашем Global.asax или внутри
раздел в пределах
web.config.
- При работе со страницами, использующими высокодинамичные данные
отображение, использование стороннего участника (бесплатно)
DynamicControlsPlaceholder контролирует
упростить код, необходимый для сохранения
состояние динамически добавленных элементов управления
между postbacks.
Ответ 2
-
Создайте базовую страницу для всех ваших страниц asp.net. Эта страница будет выводиться из System.Web.UI.Page, и вы можете поместить это в YourApp.Web.UI. Позвольте всем вашим страницам asp.net работать с классом YourApp.Web.UI.Page. Это может уменьшить боль.
-
Использовать обработчик Application_OnError для корректной обработки любой ошибки или исключения. Вы должны зарегистрировать критическое исключение и отправить сведения об исключении вместе с датой и IP-адресом клиента на идентификатор электронной почты администратора. Да ELMAH - это верный путь.
-
Использовать темы ASP.NET. Многие разработчики не используют его. Используйте их - они очень много.
-
Использовать MembershipProvider и RoleProvider. И Никогда не использовать встроенный ProfileProvider. Они хранят все в простых строках. Это резко снизит производительность при выполнении R/W
-
Используйте Firebug для отладки на стороне клиента. Постарайтесь следовать стандартам YSlow для веб-приложений. Используйте YSlow расширение для FireBug.
-
Используйте jQuery для клиентских сценариев.
-
Никогда не сохраняйте информацию об аутентификации пользователя в сеансе или не используйте сеансы, чтобы судить, вошел ли пользователь в систему. Сохранять только минимальную необходимую информацию в сеансах.
-
Посмотрите PostSharp. Может улучшить поддерживаемость вашего кода и сделать вас более продуктивным.
-
Никогда не развертывать приложение asp.net в конфигурации отладки при производстве. Найдите здесь что scottgu должен сказать об этом.
-
Пользователь Проекты веб-развертывания. Он может преобразовывать разделы web.config и заменять настройки сервера производства. Он объединит все скомпилированные классы кода в одну единую сборку, которая очень много.
-
Использовать домены без файлов cookie, чтобы обслуживать статические ресурсы, такие как изображения, скрипты, стили и т.д. Каждый запрос клиента отправляется вместе с целым куском файлов cookie, вам не нужны куки, пока вы используете изображений или скриптов. Поэтому размещайте эти ресурсы в домене без файлов cookie.
-
Сократить скрипты, таблицы стилей и ответ HTML с сервера. Удаление ненужных разрывов строк и пробелов может улучшить время загрузки и оптимизацию полосы пропускания.
Ответ 3
Формы:
-
Установите Page.Form.DefaultFocus
и Page.Form.DefaultButton
, чтобы улучшить работу пользователя
-
Перед тем, как продолжить, отметьте Page.IsValid
в обработчике кнопки Сохранить.
Общие:
-
Понимать и реализовывать методы, найденные в статье " TRULY Understanding ViewState"
-
Используйте page.IsPostBack в своих событиях страницы, чтобы остановить выполнение кода без необходимости.
-
Используйте гиперссылки вместо публикации и использования Response.Redirect, когда это возможно.
а. Поймите и используйте второй параметр Response.Redirect (он "Указывает, должно ли выполнение текущей страницы заканчиваться" )
-
Используйте жизненный цикл страницы.
-
Используйте кеш Per-Request (HttpContext.Items) вместо кеша, где это имеет смысл.
Web.Config:
Тема:
-
При использовании Темы добавьте свои статические изображения в тему.
а. Не связывайтесь с изображениями непосредственно из вашей разметки, ссылайтесь на них из файла скина или файла css в своей теме.
ex: <asp:Image SkinID="MyImage" runat="server" ImageUrl="Images/myImage.gif" />
Ответ 4
Я не думаю, что блоки try/catch всегда подходят для низкоуровневых методов. Вы хотите поймать (и log/alert, еще лучше!) Любые ошибки, прежде чем они попадут к пользователю, конечно. Но часто бывает лучше, если метод низкого уровня просто позволит его ошибкам подняться на более высокий уровень. Проблема, которую я видел при захвате ошибок низкого уровня, заключается в том, что она часто позволяет продолжить большую операцию, но тогда результат, который не совсем корректен, предоставляется пользователю или сохраняется в базе данных, а в конечном итоге это намного сложнее исправить. Это также просто лишний беспорядок в вашем коде, чтобы поставить try/catch на каждом уровне, если вы не собираетесь "ничего делать" с ошибкой, пока она не поднятся на более высокий уровень.
Ответ 5
Вот некоторые похожие вопросы, которые могут вам помочь.
лучшие методы .NET?
Лучший способ узнать лучшие практики .NET/OOP?
Это, вероятно, также будет вики-сообществом.
Ответ 6
Я бы порекомендовал пару книг, если вы заинтересованы в том, чтобы отправиться в путешествие, чтобы стать лучшим, более продуктивным разработчиком. Эти книги являются агностиками языка, и, как вы можете видеть по отзывам пользователей, очень полезно.
Код завершен 2
Прагматический программист
Если вы ищете специальную книгу .NET, вы можете оценить следующую книгу:
Руководство по архитектуре приложений Microsoft [доступно в Интернете бесплатно вне формата печати]
Ответ 7
ASP.NET
- Если вы не используете состояние сеанса, не
забыть отключить его.
- Используйте
Server.Transfer
вместо Response.Redirect
, если это возможно.
- Установить параметр истечения срока действия в IIS.
- Используйте GZip для сжатия текстовых файлов.
- Совместно используйте проверку на стороне сервера и на стороне клиента.
- Используйте Url Rewriter или Routing для создания дружественного URL для SEO.
Дизайн
- Напишите каждый класс и его свойства
вашего файла CSS в той же строке. (Чтобы уменьшить размер файла)
- Используйте CSS-спрайты. (Чтобы уменьшить запрос)