Помните, выше я говорил, что повторение бизнес-логики всегда...

Помните, выше я говорил, что повторение бизнес-логики всегда является нарушением DRY? Очевидно, что это справедливо для ситуаций, когда повторяется одна и та же бизнес-логика.

Пример:

/** Shipment from the warehouse to the customer */
class Shipment
{
public $deliveryTime = 4; //in days

public function calculateDeliveryDay(): DateTime
{
return new \DateTime("now +{$this->deliveryTime} day");
}
}

/** Order return of a customer */
class OrderReturn
{
public $returnLimit = 4; //in days

public function calculateLastReturnDay(): DateTime
{
return new \DateTime("now +{$this->returnLimit} day");
}
}

Вы уже слышите, как ваш коллега Лёха нежно вопит вам в ухо: «Это очевидное нарушение всего, во что я верю! А как же принцип DRY? У меня сердце сжимается!».

Но Лёха снова ошибается. С точки зрения электронной коммерции, время доставки товара покупателю (Shipment::calculateDeliveryDay()) не имеет отношения к сроку возврата товара покупателем (Return::calculateLastReturnDay).

Это две разные функциональности. То, что выглядит дублированием кода, на самом деле чистое совпадение. Что произойдёт, если вы объедините два метода в один? Если ваша компания решит, что покупатель теперь может вернуть товар в течение месяца, то вам снова придётся разделить метод. Ведь если этого не сделать, то срок доставки товара тоже будет составлять один месяц!
Remember I said above that repeating business logic is always a DRY violation? Obviously, this is true for situations where the same business logic is repeated.

Example:

/ ** Shipment from the warehouse to the customer * /
class Shipment
{
public $ deliveryTime = 4; // in days

public function calculateDeliveryDay (): DateTime
{
return new \ DateTime ("now + {$ this-> deliveryTime} day");
}
}

/ ** Order return of a customer * /
class OrderReturn
{
public $ returnLimit = 4; // in days

public function calculateLastReturnDay (): DateTime
{
return new \ DateTime ("now + {$ this-> returnLimit} day");
}
}

You can already hear how your colleague Lyokha gently yells in your ear: “This is an obvious violation of everything I believe in! What about the DRY principle? My heart is squeezing! "

But Lyokha is wrong again. From an e-commerce point of view, the delivery time of the item to the customer (Shipment :: calculateDeliveryDay ()) is not related to the time the customer returns the item (Return :: calculateLastReturnDay).

These are two different functionalities. What looks like code duplication is actually a pure coincidence. What happens if you combine two methods into one? If your company decides that the customer can now return the item within a month, you will have to split the method again. After all, if this is not done, then the delivery time of the goods will also be one month!
У записи 1 лайков,
0 репостов,
273 просмотров.
Эту запись оставил(а) на своей стене Владимир Шалимов

Понравилось следующим людям