Tuesday, January 19, 2016

О книге “Programming ASP.NET MVC 4: Developing Real-World Web Applications with ASP.NET MVC”

Здравствуйте, уважаемые друзья. Сегодня проведем небольшой обзор книги Programming ASP.NET MVC 4: Developing Real-World Web Applications with ASP.NET MVC, которая на Amazon имеет рейтинг 3.5.
Основная идея, почему я решил написать этот отзыв, – это попытка уговорить вас не тратить от 24 до 40 долларов за эту книгу. Она не стоит запрашиваемых денег. Буквально пару дней назад закончил ее читать, и пока в голове свежие воспоминания и эмоции, которые возникли от этой книги, решил ими с вами поделиться.
Задумкой автора было ознакомить читателя с разработкой ASP.NET MVC 4 приложения на примере сайта интернет-аукциона, который называется Ebuy. Так вот, если вы ожидаете, что в книге будет рассматриваться разработка этого сайта, то вы ошибаетесь. Точнее, ей посвящены только первые несколько, если быть точнее, то пять первых глав. Затем начинаются нереальные перепрыгивания с одной главы на другую. Мне очень понравился небольшой отрывок комментария, взятый с Amazon.
The book tries to walk you through the building of an online auction site, called Ebuy, but indeed it wasn't executed too well. I wasn't planning on writing the code while reading through the book anyway, so personally I didn't care. If you do enjoy coding as you read, however, you will no doubt be disappointed. I checked out the source code for the book on GitHub, and the source code doesn't do the book justice. The sample code needs to be a bit more feature-rich and show off much more of the book's content to be of real use. Hopefully the authors will add more to the source code. That being said, there are still plenty of good and short samples on ASP.NET MVC and related technology in the book that have nothing to do with Ebuy.
Некоторые читатели этой книги написали, что она очень хороша для опытных разработчиков, но будет сложна в понимании для начинающих. Здесь у меня, к сожалению. мнение не совпадает с большинством.
Во-первых, автор пытается в своей книге охватить буквально все: лучшие практики разработки, использование пакетов NuGet; рассказывает, как это тестировать с помощью unit-тестов; как работают движки для генерации представлений на клиенте, как работает deployment с помощью TFS. Читаешь это все – вроде все отлично: много красивых слов дают уверенность, что это точно можно будет как-то применить. Вот тут то вас и ждет наибольшее разочарование. Я, например, прочитал главу по тестированию и был шокирован. Мне очень сложно представить, чем руководствовался автор, когда пример, приведенный для теста, был реализован с жестким прокидываением DbContext, в реализации это была передача EbuyDataContext в конструктор DataContextRepository. Я слегка изменил пример, чтобы ко мне не придрались из-за авторских прав, а оставил идею и реализацию.
public class AuctionsController : Controller
{
    public AuctionsController()
        : this(new DataContextRepository(new EbuyDataContext()))
    {

    }

    public AuctionsController(IRepository repository)
    {

    }
    // GET: Auctions
    public ActionResult Index()
    {
        return View();
    }
}
Посмотрите внимательно на то, как реализован конструктор по умолчанию. А теперь вопрос для читателей. Как тестировал с помощью unit-тестов использование данного контроллера автор книги? Думаю, вы догадались, что тестировался только конструктор со входящим параметром IRepository. Автору стоило бы почитать или описать, как это можно сделать через какой-либо IoC контейнер, а не писать такую реализацию.А заодно немного почитать о том, как подобное тестировать, например, в книге,  The Art of Unit Testing, тем более, автору это бы точно не помешало.
Хотя мне не по душе, когда ты читаешь книгу, видишь в ней явную ошибку и понимаешь, что пример не будет работать 100%. Затем смотришь в исходники и понимаешь, что код отличается. Мало того, что код отличается, так примеров кода очень во всей книге приведено мало, а если и приведены, то вырваны из контекста. Часть из того, что описал автор, не используется в самих исходных кодах по интернет-аукциону.
Мне также не понятно, зачем автор упомянул об использовании NuGet пакетов, учитывая тот факт, что пример, который он привел, не является рабочим. Отдельное слово хотелось бы сказать о развертывании сайтов, о которых рассказывается в книге. У меня вопрос больше к читателям. Как часто вам приходится развертывать сайты на одной и той же машине? Наверняка ответом будет "очень редко". Зато теперь вы сможете узнать, как это делать, прочитав целую главу книги.
Однако в книге есть и позитивные моменты. Некоторые главы вполне достойно расписаны и дают неплохое и компактное представление о том или ином аспекте. Например, мне лично понравилась глава о маршрутизации. 
Итак, прорезюмируем преимущества и недочеты данной книги.
Плюсы:
  • Много теоретической базы
  • Компактная подача материала.

Минусы:
  • Много ошибок в коде
  • Некоторые главы написаны так, что видно, что автор сам не разбирается в них. Например, некоторые главы с описанием архитектуры веб-приложений
  • Сложная для понимания. Часть глав написана с перескакиванием из главы в главу. Такой текст неудобно читать, а еще сложнее понять, что автор хотел этим сказать
  • Не достаточно полно расписаны некоторые примеры

Итоги

Соглашусь, пожалуй, с оценкой в 3 или 3.5 для данной книги. Эта книга уникальна в своем роде, потому что подобных я не встречал. Много теории, которая изложена лаконично, также придают свою изюминку книги. Но от книги с таким названием я ожидал увидеть совсем другое. Как минимум – больше примеров и пояснений, комментариев. Да и хотелось бы видеть меньше ошибок в примерах. Хотя, признаться честно, их все равно меньше, чем в книге MCSD Certification Toolkit (Exam 70-483): Programming in C#, которую мне довелось прочитать и на которую я дал отдельную рецензию. Как минимум, я считаю, что книга не стоит той суммы, которую за нее запрашивают, так как информации, которую вы найдете в книге, вам будет точно не достаточно, чтобы писать Real-World Web Applications

No comments:

Post a Comment