После нескольких недель чтения на этом форуме я подумал, что пришло время написать мой первый пост.
Я сейчас перечитываю Code Complete.Я думаю, что прошло 15 лет с прошлого раза, и я обнаружил, что до сих пор не могу написать код ;-)
В любом случае, на странице 138 в Code Complete вы найдете этот пример ужаса кодирования.(Я удалил часть кода)
class Emplyee {
public:
FullName GetName() const;
Address GetAddress() const;
PhoneNumber GetWorkPhone() const;
...
bool IsZipCodeValid( Address address);
...
private:
...
}
Что Стив считает плохим, так это то, что функции слабо связаны.Или он пишет: «Нет никакой логической связи между сотрудниками и процедурами, которые проверяют почтовые индексы, номера телефонов или классификации должностей»
Хорошо, я полностью согласен с ним.Может быть, что-то вроде приведенного ниже примера лучше.
class ZipCode
{
public:
bool IsValid() const;
...
}
class Address {
public:
ZipCode GetZipCode() const;
...
}
class Employee {
public:
Address GetAddress() const;
...
}
При проверке действительности почтового индекса вам нужно будет сделать что-то вроде этого. Закон Деметры .
Поэтому, если вы хотите удалить две из трех точек, вам нужно использовать делегирование и несколько функций-оболочек, подобных этой.1022 * Но опять же у вас есть подпрограммы, которые не имеют логической связи.
Лично я считаю, что все три примера в этом посте плохие.Это какой-то другой способ, о котором я не думал?