Một trong những điều tôi đã học được trong lập trình không phải là bạn không cần báo cáo trường hợp, bạn không muốn tuyên bố trường hợp.
Tuyên bố trường hợp là cách để làm nổi bật đối tượng. Khi bạn sử dụng nó, bạn đang giảm bảo trì. Bạn sẽ có tất cả các khả năng mà bạn muốn vào thời điểm đó, nhưng ngày bạn muốn thêm một cái gì đó bạn sẽ phải xem lại mã khó chịu khi bạn không nhớ nữa sự tinh tế trong trách nhiệm của đối tượng đó, vì vậy bạn sẽ sưng lên nó nhiều hơn nữa.
Trong thời gian rất ngắn, họ trông thân thiện nhưng báo cáo trường hợp không phải là bạn của bạn. Họ sẽ cắn bạn trong thời gian dài.
Ngoài ra, mã làm cho mã của bạn kém linh hoạt hơn. Ví dụ: bạn không thể thêm trường hợp một cách tự tin về mã trước đó. Bạn bị buộc phải xem lại mã cũ khi bạn không còn nhớ mã đó nữa vì sao nó được mã hóa như thế.
Trường hợp phát biểu là kẻ thù có mã tốt.
Nếu bạn có thứ gì đó vượt xa ifTrue: ifFalse: thì điều đúng đắn cần làm là tạo trạng thái cho điều đó. Vì vậy, những gì bạn làm là để thực hiện ba lớp học rất đơn giản và tất cả họ hiểu một số động từ.
Nói, # doTheNextThing. Vì vậy, khi đối tượng nhận được thông điệp nó đại diện cho nhà nước (tùy thuộc vào cái nào trong số 3 (hoặc 30, vì vậy hãy lưu ý độ phức tạp này một cách độc đáo)) và trạng thái biết cách làm cho bộ thu ban đầu phản ứng chính xác.
Điều đó sẽ để mã của bạn nhẹ, rõ ràng và có thể bảo trì cao.Bạn sẽ có thể quên điều đó bởi vì bạn biết rằng khi bạn nhìn vào nó một lần nữa, mọi thứ hiển nhiên đến nỗi bạn không cần phải suy nghĩ trong quá khứ mã của bạn nhiều như trong tương lai của mã của bạn.
Điều quan trọng vì bộ nhớ của bạn là bộ nhớ đắt nhất bạn có và AFAIK không thể nâng cấp. Vì vậy, kỹ thuật này cho phép bạn làm những thứ mạnh mẽ hơn.
Bên cạnh đó, làm cho 3 lớp học có vẻ giống như nhiều công việc cho một số nhưng không. Bất kỳ noob có thể thêm 3 lớp trống trong nháy mắt nhưng chỉ có chuyên gia phù hợp mới nhớ được câu lệnh trường hợp trong mã cũ đã được tạo ra như thế nào. Và nếu bạn cực kỳ lạc quan, sẽ mất vài phút để nhớ lại điều đó để bạn biết phải làm gì tiếp theo. Nghĩ về điều đó.
Là một nguyên tắc chung, tôi đồng ý. Thật khó cho tôi để xem làm thế nào người ta có thể cải thiện, dễ đọc, khôn ngoan, về việc sử dụng #caseOf của Andreas Raab: nếu không: trong DnsClient (trên SqueakSource). –