Sau một vài tuần đọc trên diễn đàn này, tôi nghĩ đã đến lúc tôi đăng bài đầu tiên.Mã Hoàn thành 2ed, thành phần và phái đoàn
Tôi hiện đang đọc lại Mã hoàn thành. Tôi nghĩ rằng đó là 15 năm kể từ lần cuối cùng, và tôi thấy rằng tôi vẫn không thể viết mã ;-)
Dù sao ở trang 138 trong mã Hoàn thành bạn tìm thấy ví dụ kinh dị mã hóa này. (Tôi đã xóa một số mã)
class Emplyee {
public:
FullName GetName() const;
Address GetAddress() const;
PhoneNumber GetWorkPhone() const;
...
bool IsZipCodeValid(Address address);
...
private:
...
}
Điều Steve cho rằng các chức năng có liên quan lỏng lẻo. Hoặc anh ấy viết "Không có kết nối logic giữa nhân viên và thói quen kiểm tra mã ZIP, số điện thoại hoặc phân loại công việc"
Ok Tôi hoàn toàn đồng ý với anh ấy. Có thể một cái gì đó giống như ví dụ dưới đây là tốt hơn.
class ZipCode
{
public:
bool IsValid() const;
...
}
class Address {
public:
ZipCode GetZipCode() const;
...
}
class Employee {
public:
Address GetAddress() const;
...
}
Khi kiểm tra xem mã zip có hợp lệ thì bạn sẽ cần phải làm điều gì đó như thế này không.
employee.GetAddress().GetZipCode().IsValid();
Và điều đó không tốt liên quan đến Law of Demeter.
Vì vậy, nếu bạn muốn loại bỏ hai trong ba dấu chấm, bạn cần phải sử dụng ủy nhiệm và một vài hàm bao bọc như thế này.
class ZipCode
{
public:
bool IsValid();
}
class Address {
public:
ZipCode GetZipCode() const;
bool IsZipCodeValid() {return GetZipCode()->IsValid());
}
class Employee {
public:
FullName GetName() const;
Address GetAddress() const;
bool IsZipCodeValid() {return GetAddress()->IsZipCodeValid());
PhoneNumber GetWorkPhone() const;
}
employee.IsZipCodeValid();
Nhưng sau đó lại có các quy trình không có kết nối logic.
Cá nhân tôi nghĩ rằng cả ba ví dụ trong bài đăng này đều không hợp lệ. Có cách nào khác mà tôi chưa từng nghĩ đến không?
Tôi biết rất nhiều lập trình viên yêu mã hoàn chỉnh, nhưng thành thực mà tôi chưa từng làm. Đó là một đọc rất nhàm chán. – JonH
Điều đó tùy thuộc vào thời điểm bạn đọc. Nếu bạn là một nhà phát triển cơ sở thì đó là một bài đọc tốt.Nếu bạn là một nhà phát triển có kinh nghiệm tôi đoán những điều được viết trong cuốn sách chỉ có ý nghĩa, mà không có một cái gì đó phi thường. –
@ JonH Tôi đồng ý - cuốn sách hay nhất của ông thực sự là "Phát triển nhanh", mà ít người dường như đã đọc - nó rất tuyệt. –