Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Kiến trúc tiến hóa và thiết kế nổi dần: Ngôn ngữ, tính biểu cảm và thiết kế, Phần 2 pot
Nội dung xem thử
Mô tả chi tiết
Kiến trúc tiến hóa và thiết kế nổi dần: Ngôn ngữ, tính biểu cảm và thiết kế,
Phần 2
Tiếp tục khám phá tính biểu cảm trong mã lệnh của bạn tạo khả năng cho thiết kế
nổi dần như thế nào
Neal Ford, Kiến trúc phần mềm, ThoughtWorks
Tóm tắt: Khả năng xem và thu lượm các mẫu (pattern) diễn đạt đặc trưng là rất
quan trọng đối với thiết kế nổi dần. Và điều quan trọng sống còn đối với thiết kế là
tính biểu cảm của mã lệnh. Trong loạt bài viết gồm hai phần, Neal Ford sẽ bàn về
chỗ giao nhau giữa tính biểu cảm và mẫu diễn đạt đặc trưng, giải thích các khái
niệm này bằng cả mẫu diễn đạt đặc trưng lẫn mẫu thiết kế hình thức hóa. Ông viết
lại một số mẫu cổ điển của Gang of Four trong các ngôn ngữ động cho JVM để
cho bạn thấy rằng các ngôn ngữ biểu cảm hơn cho phép bạn thấy các phần tử thiết
kế bị che khuất bởi các ngôn ngữ mờ tối hơn như thế nào. (N.D: Gang of Four hay
GoF - Nhóm bốn người - là cuốn sách của bốn tác giả : Erich Gamma, Richard
Helm, Ralph Johnson và John Vlissides, được coi là nền tảng của các mẫu thiết kế
khác, được phân loại làm 3 nhóm: tạo lập (Creation), cấu trúc (Structure) và hành
vi (Behavior)).
Đây là phần thứ hai của loạt bài viết gồm hai phần bài minh họa về tính biểu cảm
của ngôn ngữ máy tính giúp cho thiết kế nổi lên bằng cách cho phép bạn tập trung
nhiều hơn vào bản chất hơn là vào nghi lễ như thế nào. Sự cách biệt lớn giữa ý
định và kết quả là đặc trưng của nhiều ngôn ngữ đã có từ hàng chục năm nay (bao
gồm cả ngôn ngữ Java™), khi nó thêm những nghi lễ không cần thiết cho việc giải
quyết vấn đề. Các ngôn ngữ biểu cảm hơn làm cho việc tìm các mẫu diễn đạt đặc
trưng trở nên dễ dàng hơn, vì mã chứa ít tạp nhiễu hơn. Tính biểu cảm này là dấu
hiệu của các ngôn ngữ hiện đại như Groovy và Scala; của ngôn ngữ cũ hơn nhưng
có tính biểu cảm hơn như ngôn ngữ Ruby, mà JRuby là một biến thể JVM của
ngôn ngữ đó; hoặc của những ngôn ngữ cũ hơn nhưng đã được tân trang lại
(reimagined) như là ngôn ngữ Clojure, là ngôn ngữ Lisp hiện đại trên JVM (xem
mục Tài nguyên). Trong bài viết này tôi tiếp tục phần giải thích mà tôi đã bắt đầu
trong Phần 1 — triển khai thực hiện các mẫu truyền thống của Gang of Four từ
cuốn Mẫu thiết kế bằng các ngôn ngữ có tính diễn cảm hơn.
Mẫu Decorator
Cuốn Gang of Four định nghĩa mẫu Decorator (cái trang trí) như sau:
Mẫu Decorator gắn thêm các trách nhiệm bổ sung cho đối tượng theo phương thức
động. Các mẫu Decorators cung cấp một lựa chọn linh hoạt để tạo lớp con nhằm
mở rộng chức năng.
Nếu bạn đã từng sử dụng các gói java.io.* thì bạn ý thức được một cách sâu sắc về
mẫu Decorator. Rõ ràng là các nhà thiết kế các thư viện I/O đã đọc phần Decorator
của cuốn Gang of Four và thực sự đã yêu thích nó! Đầu tiên, tôi sẽ cho bạn xem
việc thực hiện theo cách truyền thống cho một mẫu Decorator bằng ngôn ngữ
Groovy, sau đó làm cho nó trở nên động hơn trong các ví dụ tiếp theo.
Cái trang trí truyền thống
Liệt kê 1 cho thấy một lớp Logger cùng với hai cái trang trí dành cho nó (
TimeStampingLogger và UpperLogger), cả hai cái trang trí này được thực hiện
bằng ngôn ngữ Groovy:
Liệt kê 1. Lớp Logger và hai cái trang trí
class Logger {
def log(String message) {
println message
}
}
class TimeStampingLogger extends Logger {
private Logger logger
TimeStampingLogger(logger) {
this.logger = logger
}
def log(String message) {
def now = Calendar.instance
logger.log("$now.time: $message")
}