Моё знакомство с 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".
4. Правила создания POCO классов. Обязательно изучите когда и зачем создаются virtual peroperties (свойства) классов.
5. Статья из той же серии, но уже про Lazy Loading.
6. Коротко и ясно во втором комментарии описание отличий Eager и Lazy Loading. Обязательно разберитесь, нужно ли вам Lazy или Eager Loading.
7. Пример паттерна Unit of Work
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-авторизации на сайте и валидации данных, и наверное, много ещё чего, что будет постепенно приходить мне в голову.
Комментарии
Отправить комментарий