Danh mục

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

Số trang: 30      Loại file: pdf      Dung lượng: 212.90 KB      Lượt xem: 9      Lượt tải: 0    
Thư viện của tui

Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

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...
Nội dung trích xuất từ tài liệu:
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 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 2Tiế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àoNeal Ford, Kiến trúc phần mềm, ThoughtWorksTóm tắt: Khả năng xem và thu lượm các mẫu (pattern) diễn đạt đặc trưng là rấtquan 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áiniệ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ếtlạ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ếtkế 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 hayGoF - Nhóm bốn người - là cuốn sách của bốn tác giả : Erich Gamma, RichardHelm, 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ànhvi (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ảmcủ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 trungnhiề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 (baogồm cả ngôn ngữ Java™), khi nó thêm những nghi lễ không cần thiết cho việc giảiquyế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 đặctrư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ấuhiệu của các ngôn ngữ hiện đại như Groovy và Scala; của ngôn ngữ cũ hơn nhưngcó tính biểu cảm hơn như ngôn ngữ Ruby, mà JRuby là một biến thể JVM củangô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 (xemmụ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 đầutrong 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 DecoratorCuố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ằmmở 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 Decoratorcủa cuốn Gang of Four và thực sự đã yêu thích nó! Đầu tiên, tôi sẽ cho bạn xemviệ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ốngLiệ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ệnbằ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) }}class UpperLogger extends Logger { private Logger logger UpperLogger(logger) { this.logger = logger } def log(String message) { logger.log(message.toUpperCase()) }}Lớp Logger là một trình ghi nhật ký đơn giản, nó viết thông điệp ghi nhật ký ramàn hình. Lớp TimeStampingLogger thêm dấu ấn thời gian thông qua việc trangtrí, và lớp UpperLogger chuyển thông điệp ghi nhật ký sang dạng chữ hoa. Để sửdụng một trong các cái trang trí này, bạn bao bọc một cá thể Logger bằng một cáitrang trí thích hợp, như trong liệt kê 2:Liệt kê 2. Sử dụng các cái trang trí để bọc một trình ghi nhật kýdef logger = new UpperLogger( new TimeStampingLogger( new Logger()))logger.log(Groovy Rocks)Kết quả đầu ra từ Liệt kê 2 cho bạn thấy một thông điệp ghi nhật ký với dấu ấnthời gian đã chuyển sang dạng chữ hoa:Tue May 22 07:13:50 EST 2007: GROOVY ROCKSCho đến đây, điều khác thường duy nhất về cái trang trí này là việc thực hiện nóbằng Groovy. Nhưng tôi có thể thực hiện một cái trang trí mà không cần thêm cấutrúc phụ như trong cách tiếp cận dựa trên lớp.Trang trí tại chỗCác mẫu thiết kế truyền thống trong cuốn Gang of Four giả định rằng giải phápcho mọi bài toán đều yêu cầu xây dựng thêm các lớp. Tuy nhiên, các ngôn ngữhiện đại trên JVM có những phương tiện khác, chẳng hạn như các lớp mở, choph ...

Tài liệu được xem nhiều: