Здравствуйте, Огинский Евгений, Бурда Роман, Вы писали:
ОЕБ>В статье рассматриваются некоторые ошибки, которые часто встречаются в коде программ. Даны рекомендации, как не стоит писать код, на какие этапы разработки кода нужно обращать внимание в первую очередь.
Кстати, вы не видите противоречий между этими двумя приемами упрощения?
Первый прием. Код:
// Не отправлено ли уведомление ранее и наступило ли время отправки уведомления.
if (!context.Order.Fields.ContainsKey("OrderMailSend")
&& (context.Order.PaymentStatus == PaymentStatus.Paid
|| (context.Order.PaymentStatus == PaymentStatus.InProgress
&& GetPaymentMethod(context).StartsWith("banktransfer")
)
)
)
{
IEnumerable<string> email = GetEmailAddress(context);
MailNotification.SendOrderConfirmation(email, context.Order);
// Отмечаем что уведомление о заказе отправлено
context.Order.Fields.Add(
new EntityField { Name = "OrderMailSend", Value = true });
}
Заменен на:
if (!OrderMailSent(context) && MailNotificationRequired(context))
{
IEnumerable<string> email = GetEmailAddress(context);
MailNotification.SendOrderConfirmation(email, context.Order);
MarkOrderAsSent(context);
}
Что здесь по сути сделано? Сложные вызовы заменены на короткие псевдонимы.
Второй прием. Код:
public int Quantity
{
get
{
int quantity;
if(int.TryParse(TxtQuantity.Text, out quantity))
return quantity;
return 0;
}
}
Заменен на:
public int Quantity
{
get
{
if (!int.Valid(TxtQuantity.Text))
return 0;
return int.Parse(TxtQuantity.Text);
}
}
Что здесь по сути сделано? Множественное использование короткого псевдонима заменено на множественное использование сложных вызовов.
Можно объяснить почему в первом примере хорош один прием, а во втором примере хорош прием обратный первому?