Re: Книга Adaptive code via C#
От: Sinix  
Дата: 12.06.15 20:22
Оценка: 131 (5)
Здравствуйте, HrorH, Вы писали:

HH>Адаптивный код на C#: проектирование классов и интерфейсов, шаблоны и принципы SOLID


HH>если бы выбирать одну книгу про SOLID и паттерны на C#, я выбрал бы эту.


Что ж тогда в остальных? По впечатлениям — очень средне.

Глава по скраму — как всегда, перечисляем методики, о которых слышал автор. Про собственно скрам — толком ни слова, кроме "лучше, чем waterfall"

Глава про зависимости — эпический ляп

Framework assemblies always load

It is worth noting that, unlike other dependencies, references to .NET Framework assemblies will always cause those assemblies to load. Even if you are not really using an assembly, it will still load at application startup. Fortunately, if multiple projects in the solution all reference the same assembly, only one instance of this assembly is loaded into memory and is shared among all dependents.

(я когда читал — помню бросился перепроверять, не мог же я всё настолько забыть).

Глава про паттерны — снова фейл. Борьбу с null reference exception предполагается делать вот так:

public class NullUser : IUser
{
    public void IncrementSessionTicket()
    {
        // do nothing
    }
}


Для разнообразия правильно расписали паттерн стратегия (поразительно, но не всегда это удаётся). Зато тут же

Fluent interfaces are easy to implement, too.

Я тут могу добавить только одно слово: наследование.

Раздел про SOLID — немного пристойного текста и тут же снова паттерны без включения мозга.

public class LoggingStopwatch : IStopwatch
{
    public LoggingStopwatch(IStopwatch decoratedStopwatch)
    {
        this.decoratedStopwatch = decoratedStopwatch;
    }

    public void Start()
    {
        decoratedStopwatch.Start();
        Console.WriteLine("Stopwatch started...");
    }

    public long Stop()
    {
        var elapsedMilliseconds = decoratedStopwatch.Stop();
        Console.WriteLine("Stopwatch stopped after {0} seconds",
  TimeSpan.FromMilliseconds(elapsedMilliseconds).TotalSeconds);
        return elapsedMilliseconds;
    }

    private readonly IStopwatch decoratedStopwatch;
}


Stopwatch. С декоратором. С Console.WriteLine() _после_ decoratedStopwatch.Start();. Я оччень хочу спросить, автор вообще в своей жизни таймеры для _точного_ измерения времени использовал?

Думаете, это единственный пример? Неа.

Как думаете, какие проблемы по мнению автора могут быть с этим кодом:

public class AsyncComponent : IComponent
{
    // ...

    public void Process()
    {
        Task.Run((Action)decoratedComponent.Process);
    }
}


  не подглядывать. А впрочем, всё равно не угадаете

There is a problem with the AsyncComponent class: its dependency on the Task class is implicit, meaning that it is hard to test this class. Unit testing code with static dependencies is difficult, so you would be better off replacing this skyhook with a crane.


Автор правда ниже упоминает про "вы не сможете получить результат задачи", но упоминает как о незначительной проблеме, а не как о причине выбросить и сжечь.

А, да, я там выше писал про "правильное описание стратегии"? Так вот, написать-то автор написал, понять, увы, не смог. Сорри за листинг, это последний.

Вместо switch предлагается

public class OnlineCart
{
    public OnlineCart()
    {
        paymentStrategies = new Dictionary<PaymentType, IPaymentStrategy>();
        paymentStrategies.Add(PaymentType.CreditCard, new PaypalPaymentStrategy());
        paymentStrategies.Add(PaymentType.GoogleCheckout, new GoogleCheckoutPaymentStrategy());
        paymentStrategies.Add(PaymentType.AmazonPayments, new AmazonPaymentsPaymentStrategy());
        paymentStrategies.Add(PaymentType.Paypal, new PaypalPaymentStrategy());
    }

    public void CheckOut(PaymentType paymentType)
    {
        paymentStrategies[paymentType].ProcessPayment();
    }

    private IDictionary<PaymentType, IPaymentStrategy> paymentStrategies;
}

Да, по мнению автора — это стратегия. Очевидно, потому что в имени класса упомянуто.

На этом месте я сдался. Книга заслуживает ярлыка "эталонный фаулер головного мозга в вакууме". Кому её давать — решительно непонятно. Новичкам низзя — не увидят всех ляпов и ошибок. Специалистам — тоже незачем, слишком неудобное соотношение шум/польза. Хотя не, вру. Как тренажер "найди, где автор налажал" — самое оно. По-моему, первая книга, которая заставляет чуть ли не на каждой странице лезть и проверять всё за автором.


P.S. Слона-то я и не заметил:

HrorH: На правах троллинга

Одобряю, замысел удался
Отредактировано 12.06.2015 21:03 Sinix . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.