Несколько вещей, которые я выучил из проекта IdeaStrike
Прежде всего, я должен сказать, что команда Code52 делает потрясающую работу. Это очень оригинальная инициатива, классные идеи и продуктивная команда. Каждый раз, когда они объявляют о начале нового проекта, во мне просыпается «продуктовая зависть»
. Следите за их блогом и гитхаб аккаунтом, чтобы быть в курсе событий.
Мое внимание, на этот раз привлек проект IdeaStrike. Это аналог известного продукта uservoice для Open Souce (OS) коммюнити. Как всегда, первый релиз был сделан очень быстро (за неделю) и мне было очень интересно посмотреть, что внутри? Поэтому, я клонировал их репозиторий и провел небольшую хак-сессию. Я потратил пару часов, и теперь хочу поделится некоторыми интересными находками.
Билд скрипты – маленькие и понятные
Проект включает build.cmd. При его запуске, он скачал все зависимости через NuGet, построил сайт и запустил все юнит тесты. Это, в общем, все что вам необходимо, для маленьких проектов. Когда, я заглянул внутрь, то увидел:
@echo Off set config=%1 if "%config%" == "" ( set config=Debug ) %WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.proj /p:Configuration="%config%" /t:AppHarbor /m /v:M /fl /flp:LogFile=msbuild.log;Verbosity=Normal /nr:false
Это очень простой скрипт, который, кроме всего прочего, может быть с успехом переиспользован в других проектах (что я сейчас и делаю).
Использование NuGet пакетов, без добавления из в SCM
Я крайне удивился, как быстро был склонирован репозиторий! Как выяснилось, папка packages была оригинально пуста. Как известно, библиотеки зависимостей, это основной «груз», который препядствует быстрому клонированию. Как это может быть? Как я сказал в пункте.1, как только я запустил билд скрипт, то все пакеты загрузились автоматически. Как выяснилось, что фича NuGet’a, которая позволяет работать с зависимостями, без необходимости добавлять из под контроль версий. Это очень круто, особенно для больших проектов, где клонирование и бранчи могут стать более затяжной операцией. Детали реализации такого повередения, описаны в документации на NuGet сайте.
Развертывание базы данных приложения, на первом запуске
IdeaStrike использует EF 4.3 Beta 1, через Code First подход. EF Code First также включает в себя классную фичу, под названием Migrations (Миграции). Это именно та фича, которой так недоставало EF Code First, когда я первый раз пробывае его в деле. Мы опеределяем Context, DbConfiguration класс и миграционные скрипты (которые представляют собой просто C# код) и при инициализации приложения, вызываем:
private static void DoMigrations()
{
var settings = new IdeastrikeDbConfiguration();
var migrator = new DbMigrator(settings);
migrator.Update();
}
Схема базы данных, будет развернута автоматически, при старте приложения.
Социальный логин с Janrain
Когда я кликнул «Sign In» кнопку, то увидел приятный диалог, с которым можно было зайти на сайт, используя свой текущий социальный аккаунт.
JanRain оказался очень крутым решением. Я помню, когда-то я пытался найти, что-то подобное для ASP.NET MVC и был очень разочарован тем фактом, что не нашел ничего стоящего. Для всех существующих решений, требовалось изучать OAuth протокол и писать код. JanRain делает всю грязную работу. Как только юзер авторизован, вызывается POST по заданному URL, который содержит специальный токен. По этому токену, можно запросить все необходимые детали, по данному пользователю, как имя, електронный адрес и т.д. (смотри LoginModule.cs). У них чесные планы для хобби проектов и блоггеров.
Bootstrap для CSS и HTML
Bootstrap это не самое новое и не уникальное решение на данный момент, я как минимум знаю еще несколько хороших CSS/HTML фреймворков. Но IdeaStrike доказывает в очередной раз – нет смысла изобретать колесо. Использование результатов работы людей, которые умнее вас, это истинное правило прагматичного разработчика.
«Будующий Я», пожайлуйста, никогда больше не начинай свое приложение HTML/CSS с чистого листа, полученный результат все равно будет – фигня. Bootstrap, великолепное решение для всякого рода проектов и прототипов. Принимая во внимание количество «наблюдателей» и «форков» проекта на гитхабе, я могу ожидать новых улучшений и фич, в ближайшем будущем.
Nancy как веб фреймворк
Я слышал про Nancy несколько раз, но до этого мне не доводилось его потрогать. Для меня Nancy это просто альтернативная реальность, по сравнению с ASP.NET MVC. Не сложно понять, что делает код. Не сложно его изменять. Все довольно прозрачно: опеределяете HTTP verb, раут и действие, как лямбду. Самый главный класс в Nancy это Module, вся логика модуля расположенна в конструкторе:
public FeatureModule(IIdeaRepository ideas, IFeatureRepository features, IUserRepository users)
: base("/idea")
{
_ideas = ideas;
_features = features;
this.RequiresAuthentication();
Post["/{idea}/feature"] = _ =>
{
int id = _.Idea;
var feature = new Feature
{
Time = DateTime.UtcNow,
Text = Request.Form.feature,
User = Context.GetCurrentUser(users)
};
_features.Add(id, feature);
return Response.AsRedirect(string.Format("/idea/{0}#{1}", id, feature.Id));
};
}
Приложения Nancy могут хостится, как ASP.NET / WCF / SelfHosted, а также на любом хосте поддерживающи OWIN. Доступны несколько View Engines (включая Razor). Больше делатей на Nancy гитхаб аккаунте.
Заключение
IdeaStrike это хороший пример опен соурсе проекта, на котором можно чему нибудь научиться. Я не могу сказать, что мне понравились абсолютно все вещи.. некоторые штуки реально мешают мне работать. Я постараюсь раскрыть это в следующих постах.
NancyFX, вероятно станет следующим фреймворком, который я буду изучать, так как мне уже пора выходить из комфортной зоны ASP.NET MVC. Я продолжаю следить за развитием IdeaStrike и уже сделал несколько важных пул реквестов. Надеюсь у проекта интересное будущее!
Оригинал статьи – http://www.beletsky.net/2012/02/few-things-i-learned-from-ideastrike.html.








