К основному контенту

Моё знакомство с ASP.NET MVC3 и Entity Framework Code First...

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

Хотя я и писал кое-что на php и javascript (в том числе мой сайт), однако до сей поры профессионально занимался разработкой только клиент-серверных и десктопных приложений на C++ (MFC, COM) и C# (WPF, WinForms), и в веб не совался. Но прогресс и мой интерес к технологиям не остановить, поэтому занимался и сторонними вещами, типа XNA Game Engine, Java Script, и т.д. Ни php ни ASP.NET мне не нравились. Php из-за самого языка и какой-то "немного левой" поддержки ООП, а ASP.NET - из-за code-behind'ов и, главным образом, отсутствия положительных комментариев вообще об этой технологии. Когда же появился Asp.Net MVC - перспективная технология, позволяющая разрабатывать веб-приложения используя правильные паттерны проектирования, да и к тому же, используя хорошо знакомый мне C# - тут я не устоял.

Первую книгу я купил и прочел года полтора назад: "Стивен Сандерсон. ASP .NET MVC Framework с примерами на C# (для профессионалов)". Она мне понравилась, как и технология вообще. Правда, я был не в восторге от синтаксиса самих HTML страниц (View-ов), в которых нужно было расставлять дурацкие скобочки <%...%> и как-то слишком нагромождённо генерить Мастер-страницы. Однако фреймворк быстрое развивается, и теперь близится уже 4-я часть. 3я версия фреймворка меня очень радует наличием Razor Engine, с помощью которого можно удобно и быстро строить странички (View-вы), но и кроме того в нём появилось множество дополнительных фич, типа классов-хелперов.

С течением времени видно как много появилось различных паттернов, упрощающих и улучшающих архитектурный дизайн приложений. Одно только количество готовых библиотек контейнеров для Depdendency Injection перевалило за десяток (Unity, Ninject, Autofac, Spring.NET, Castle Windsor, и др. Можно посмотреть список тут. Кстати, скоро ожидается выход Microsoft Unity Framework 4.0. В общем, технология живет и процветает. Прочитав третью версию книги Сандерсона в соавторстве с Адамом Фрименом "Pro ASP.NET MVC 3 Framework", я решил попробовать написать что-нибудь свое. "Хватит теории, пора к практике..." - сказал я себе =). Вот тут, как всегда, и начались приключения.

Технология Entity Framework известна давно, однако совсем недавно вышла версия 4.1 (а теперь уже и 4.3), в которой появилась методика Code First - генерация базы данных на основе POC-классов (Plain of code), написанных на C#. И это меня воодушевило. Неужели, наконец-то, можно забыть про написание SQL запросов для генерации таблиц и связей базы, или про моделирование БД в "мастере-конструкторе", а потом пытаясь свести это воедино с моделью данных в коде! Таки-да, это теперь возможно, и кроме того, теперь есть технологии обновления уже существующей базы данных (Entity Framework Code First Migrations), чего никогда до этого не существовало. На торрентах есть видео с примерами о том, как это делается. Я не буду здесь писать велосипед, примеров Интернете достаточно, поэтому приведу здесь ссылки, показавшиеся мне наиболее полезными:

1. Книга про Entity Framework вообще, дабы понять своё счастье, когда перейдёте на Code First: "Larry Tenny, Zeeshan Hirani - Entity Framework 4.0 Recipes A Problem-Solution Approach 2010". В кратце - это просто набор примеров.

2. Книга про Code First, меньше 200 страниц убористого текста, реально прочитать и вникнуть за пару дней: "Lerman J., Miller R. - Programming Entity Framework. Code First - 2011".

3. Интро, или hello-world =)

4. Правила создания POCO классов. Обязательно изучите когда и зачем создаются virtual peroperties (свойства) классов.

5. Статья из той же серии, но уже про Lazy Loading.

6. Коротко и ясно во втором комментарии описание отличий Eager и Lazy Loading. Обязательно разберитесь, нужно ли вам Lazy или Eager Loading.

7. Пример паттерна Unit of Work

8. Непутёвые заметки с Habr

9. nopCommerce - open-source веб-магазин.

10. Исходные коды и видео готового проекта для примера

1 Заметка.

Многие хотели бы добавить функции регистрации и входа пользователей на их сайте. Для этого платформа ASP.NET давно предлагает готовое решение: SqlMembershipProvider, а также готовые Roles и Profiles провайдеры. Однако, обратившись к статьям и описаниям технологии, многие авторы советуют перегружать стандартные механизмы своими, т.к. первые являются слишком громоздкими для небольших проектов. Мне остаётся лишь согласиться, однако найти нормальный пример очень трудно. Я нашел такую статью, и с помощью книги Сандерсона, собственного опыта и этой статьи - сделал свой механизм регистрации пользователей. Вот ссылка: Custom authentication with MVC 3.0.

2 Заметка

Создать Captcha можно, используя код, представленный в первой книге Сандерсона (в 3й его уже нет), а также используя готовые библиотеки, типа reCaptcha.

3 Заметка.

Работая с Ninject будьте бдительны в выборе механизма создания ваших объектов репозиториев или контекстов данных. По умолчанию Ninject не использует опцию One Instance Per Http Request, необходимую большинству из нас. В 3 версии её можно включить методом InRequestScope():


using Ninject.Web.Common;
using Ninject.Web.Mvc;

public class NinjectControllerFactory : DefaultControllerFactory
{

  public NinjectControllerFactory(IKernel kernel)
  {
    _ninjectKernel = kernel;
    _ninjectKernel.Bind().To().InRequestScope();


  }

  private IKernel _ninjectKernel;
}

4 Что дальше?

А дальше этот пост будет обновляться и расти, пока у меня есть что сюда писать =). Я планирую изучить вопросы создания OAuth-авторизации на сайте и валидации данных, и наверное, много ещё чего, что будет постепенно приходить мне в голову.

Комментарии

Популярные сообщения из этого блога

Делаем себе бесплатный VPN на Amazon EC2

Читать этот пост в Telegraph. Другие посты в канале в Telegram. Кто только не расписывал уже пошаговые инструкции по этой теме. Однако, время идёт, ПО меняется, инструкции нуждаются в обновлении, а люди в современной России всё больше нуждаются в применении VPN. Я собираюсь описать все шаги для создания бесплатного сервера на Amazon EC2 с операционной системой Linux и необходимые команды для настройки VPN сервера на нём. Чтобы не повторяться о деталях, которые были много раз описаны на русскоязычных и англоязычных ресурсах, по ходу статьи я просто приведу целую кипу ссылок, где можно почерпнуть необходимую информацию, а где информация устарела - опишу подробнее что нужно сдеать. В итоге, сервер будет доступен для вас из любой точки планеты, с любой операционной системы, и бесплатно (с определёнными ограничениями по трафику). Шаг первый - Регистрируемся на Amazon AWS Нужно зайти на сайт https://aws.amazon.com/ru и сразу перейти к Регистрации, нажав одноимённую кнопку. При р

В помощь программисту: инструкции по работе с Ubuntu сервером

Программистам чаще приходится писать код и заботиться о его чистоте, правильных абстракциях в коде, корректных зависимостях и прочих сложностях профессии. При этом, настройка и обслуживание серверов, хоть и связанная область - это отдельный навык, необходимый не каждому, и помнить о котором в деталях сложно. Поэтому, я делаю ряд микро-инструкций, которыми буду пользоваться и сам, когда необходимо. Это не статьи, а пошаговые помощники, которые я буду дополнять и наполнять по мере надобности. Делаем бесплатный VPN на Amazon EC2 Создание ключей SSH Подключение к серверу через SSH Передача файла с Linux сервера наWindows машину Делаем VPN сервер на Ubuntu 20.04 используя OpenVPN и EasyRSA  Отображение GUI с Linux сервера на Windows машине

Выбираем все плюсы из трех парадигм Entity Framework

Между парадигмами разработки с Entity Framework (Code First, Model First, Database First) я выбрал промежуточную, потому что ни одна меня не устраивала полностью. В Code First меня радуют чистые POCO классы, но не устраивает невозможность моделирования базы. В Database First и Model First мне не нравится генерация EDMX и другого всего лишнего. Таким образом, я нашел для себя такое решение: 1. Я моделирую схему в любой удобной программе (тут любая внешняя программа моделирования, генерирующая SQL Server-совместимые скрипты генерации базы) Рис. Смоделированная схема БД. 2. Создаю базу в SQL Management Studio 3. Делаю Reverse Engineering базы в POCO классы (как в Code First) с помощью плагина Entity Framework Power Tools Рис. Установленный плагин для Reverse Engineer. Рис. Вот так делается Reverse Engineer базы данных в POCO классы. Рис. Результат генерации POCO классов на основе базы данных: папочка Models с готовым контекстом, классами объектов и маппинг-классами.