пятница, 30 сентября 2011 г.

Cтрого типизированный аналог для UrlHelper.Action(string, string)

Пришло в голову написать строго типизированный аналог для UrlHelper.Action(string, string):
public static class MyMvcExtensions
{
  public static string Action<TController>(this UrlHelper urlHelper,
      Expression<Func<TControllerActionResult>> action)
    where TController : Controller
  {
    var controllerName = typeof (TController).Name;
    var actionName = GetActionName(action);
    return urlHelper.Action(actionNamecontrollerName);
  }

  private static string GetActionName<TController>(
      Expression<Func<TControllerActionResult>> action)
    where TController : Controller
  {
    var mce = action.Body as MethodCallExpression;
    if (mce == null)
    {
      throw new InvalidOperationException(action.Name + " is not a valid controller action");
    }
    return mce.Method.Name;
  }
}

Использовать так:
<a href="@(Url.Action<HomeController>(c => c.About()))">about</a>
<a href="@(Url.Action<HomeController>(c => c.Index()))">index</a>

Идея ясна, вроде, придумать дельше легко. Может кому и пригодится =)
В любом случае я советую сделать просто статический класс, расширающий UrlHelper и в котором хранить все-все ссылки в стандартном формате, которые используете в проекте, и обращаться только к нему.

понедельник, 19 сентября 2011 г.

Немного о Chrome Extensions

Не так давно, когда я ещё не знал что есть кнопочка "Сохранить" в Клавогонках при создании игры, меня очень парило постоянное ручное выставление режима в "Одиночный, 5 секунд". Подумалось тогда, что можно написать расширение для хрома, которое будет делать это за меня.
Собственно, на это и был потрачен вчерашний вечер.

среда, 7 сентября 2011 г.

Почему я сменил работу

Я сменил работу не потому что был чем-то недоволен. Даже наоборот, предыдущая работа меня полностью устраивала. Но, тем не менее — лучшее враг хорошего. Да и никто не сказал что на новом месте будет лучше, есть только догадки.

вторник, 6 сентября 2011 г.

Использование выражений для устранения дублирования кода

Последнее время стал заниматься такой фигнёй для устранения дублирования. Да, возможно, это бред.

Что здесь происходит?
1. Из репозитория берётся метод, использующий постраничный вывод данных.
2. Этот метод передаётся в метод, который инкапсулирует логику работы со страницами.
3. Всё это оборачивается в using unit of work'а (uow = Unit of work), в котором создается Entity контекст.
4. Возвращается в дочернем экшене.
Это похоже на ASP.NET WebForms Control (.ascx)


[ChildActionOnly]
public PartialViewResult GetExclusiveVideo(int count, int page = 1)
{
       return InUow(() => PartialView(Paged(_videoItemRepository.ExclusiveVideos
                                            page, count)));
}

private TModel InUow<TModel>(Func<TModel> func)
{
       using (_unitOfWorkFactory.Create())
       {
             return func();
       }
}

private TModel InUow<TModel>(Func<IUnitOfWork, TModel> func)
{
       using (var uow = _unitOfWorkFactory.Create())
       {
             return func(uow);
       }
}
  
private IEnumerable<TModel> Paged<TModel>(Func<int, int, IEnumerable<TModel>> pagedMethod,                      
                                          int page, int count)
{
       var skip = (page - 1)*count;
       return pagedMethod(skip, count);
}

Красиво? Удобно? Неясно? Слишком обще? Есть ещё извращённые идеи?
Спасибо за внимание.

воскресенье, 4 сентября 2011 г.

Музыка

Решил завязать с музыкой.
Почему?
Не знаю чего конкретно не хватает: времени, упорства, воображения, лицензионного софта?
Очень быстро портится настроение и парят вопросы "Есть что нового послушать?". Нету.
Надо сосредоточиться на чём-то одном. Пока это не музыка.

Моя музыка:
http://www.last.fm/music/Orthonorma
http://www.myspace.com/186734155
http://soundcloud.com/orthonorma

Мой трек Our Morning Dream есть на сборнике Peace Therapy 3.
Под псевдонимом Emulsion есть альбом Under the Snow, в нете не нашёл, у меня есть точно.
Есть ещё пара треков под псевдонимами Dj Molotov и Clockwork Master.
Ещё дофига треков, которых в нете нет, но могу попробовать выложить.