Bài viết
Kho tài liệu và bài viết được chia sẻ, đánh giá bởi cộng đồng
C# 3.0 Design Pattern
Nội dung bài viết
Khi bạn đang phải đối mặt với một vấn đề để giải quyết (Và thẳng thắn, không phải là những ngày này?), chiến lược cơ bản mà những người lập trình máy tính chúng ta thường dùng được gọi là " Chia để trị." Nó là như thế này:
- Chia vấn đề cụ thể thành các vấn đề nhỏ hơn.
- Giải quyết từng vấn đề nhỏ.
- Kết hợp các kết quả vào một giải pháp của vấn đề lớn.
Giảm các vấn đề phức tạp xuống mức quay vòng các trạng thái của một vài tỷ bit là những gì chúng ta làm cả ngày. Nhưng "chia để trị" không phải là chiến lược duy nhất có thể làm. Chúng ta cũng có thể dùng một cách tiếp cận chung chung hơn:
- Khái niệm các vấn đề cụ thể như là một trường hợp đặc biệt của một vấn đề tổng quát hơn.
- Bằng cách nào đó giải quyết vấn đề chung.
- Điều chỉnh giải pháp của vấn đề chung cho các vấn đề cụ thể.
Design patterns (mẫu thiết kế, DP) nằm trong số các công cụ quan trọng của những người tán thành cách tiếp cận chung chung. Nếu bạn nhìn vào các mẫu từ một loạt các giải pháp phần mềm, bạn sẽ thấy rằng mặc dù các chi tiết cụ thể có thể thay đổi rất nhiều, thường có một sự tương đồng về cấu trúc cơ bản. (Tìm kiếm một hệ thống tập tin cho một tập tin với một thuộc tính đặc biệt là trong một số ý nghĩa cấu trúc tương tự để tìm kiếm một cây phân tích cú pháp chú thích cho một biểu tượng với một loại hình cụ thể.) Design patterns hệ thống hóa các giải pháp chung cho các vấn đề chung.
Ví dụ tối hậu của phương pháp tiếp cận chung chung đương nhiên là thiết kế và thực hiện bản thân các ngôn ngữ lập trình. Như các công cụ về giải quyết vấn đề, rất khó để tổng quát hơn một ngôn ngữ lập trình như C#. Khi thiết kế ngôn ngữ lập trình mới (hoặc phiên bản mới của ngôn ngữ lập trình cũ), chúng ta nghĩ về những vấn đề chung đang phải đối mặt hàng ngày của các nhà phát triển thực sự và tìm ra cách để tạo ra một ngôn ngữ mà giải quyết chúng một cách tổng quát, đẹp đẽ, và mạnh mẽ theo cách đó để được áp dụng rộng rãi.
Chúng ta muốn đưa các khái niệm trừu tượng hữu ích và mạnh mẽ nhất để sâu trong cơ sở ngôn ngữ mà bạn hầu như không có ý thức thậm chí còn ghi lại chúng như đang có nữa. Các mẫu như "biến cục bộ" hoặc "gọi thủ tục" hoặc "vòng lặp while" có quá nhiều trong phần của không khí mà tất cả chúng ta hít thở mà chúng ta thậm chí không nghĩ về chúng như mô hình nữa.
Hơn nữa, chúng ta muốn làm một ngôn ngữ mà các mẫu đó là hữu ích nhưng có lẽ không hoàn toàn như vậy, cơ bản cốt lõi vẫn tương đối đơn giản để mà triển khai rõ ràng và thanh lịch. Một lớp trong C # có thể được đánh dấu là "static", hay "abstract", hoặc "sealed", nhưng không phải là "singleton". Đó là một sự lựa chọn có chủ ý của các nhà thiết kế ngôn ngữ. Nhưng, việc thực hiện một lớp singleton trong C # vẫn còn khá dễ dàng.
Vùng xám ở giữa "nền tảng rõ ràng" và "đôi khi hữu ích" là nơi những thách thức thiết kế thú vị xảy ra. Những quan sát của chúng ta về các mẫu thiết kế được sử dụng bởi các nhà phát triển thực tế trong C# (và các ngôn ngữ khác) đẩy mạnh quy trình thiết kế cho phiên bản mới.
Xem xét ví dụ làm thế nào bạn sẽ thực hiện một mô hình lặp trên một danh sách liên kết trong C# 1.0. Bạn sẽ định nghĩa một lớp Enumerator để đại diện cho một vị trí trong danh sách có chứa rất nhiều mã soạn sẵn nhàm chán (mà rất khó đọc), và các giải pháp sẽ rất khó tái sử dụng. Khái niệm "liệt kê một tập hợp các sự vật" là đủ đối với một loạt các vấn đề gặp phải được đưa ra như một khái niệm ngôn ngữ học đầu tiên. Trong C# 2.0 với câu lệnh return yield của nó trình biên dịch có thể tạo ra tất cả các mã tẻ nhạt đó cho bạn, và hệ thống kiểu generic làm lặp đi lặp lại trên một tập hợp các những thứ mà an toàn kiểu không có vấn đề gì về "những thứ" đó.
Tất cả điều này là một chặng đường dài để nói rằng chỉ cần lý do tại sao. Tôi rất vui mừng về Language Integrated Query (LINQ) trong C # 3.0. Chúng ta tin rằng lặp trên tập mọi thứ là một khởi đầu tuyệt vời, nhưng chúng ta có thể làm được nhiều hơn. Phân loại, lọc, nhóm, nối, lập dự án, và chuyển đổi dữ liệu cũng là hoạt động cơ bản rất hữu ích trong khá nhiều phạm vi. Cho dù bạn đang viết một trình dò đường, một trình biên dịch, một trình đọc XML, hoặc một hệ thống an ninh ngân hàng trực tuyến, sẽ tốt khi mà bạn chỉ cần thao tác trên tập của những cái gì đó một cách phong phú.
Bằng cách di chuyển các khái niệm này ra khỏi mô hình đối tượng cụ thể và trở thành một ngôn ngữ lập trình thông dụng, chúng ta hy vọng giải quyết những vấn đề tổng quát hơn. Chúng ta cũng hy vọng, khi, bằng cách thêm query expressions (biểu thức truy vấn), lambda expressions (biểu thức lambda), extension methods (phương thức mở rộng), initializer expressions (biểu thức khởi tạo), expression trees (cây biểu thức), và với các tính năng thiết lập đã phong phú của C # 2.0 và 1.0, chúng ta làm cho nó dễ dàng hơn để thực hiện đẹp đẽ mọi loại design patterns hữu ích khác.
Và đó cũng là lý do tại sao tôi rất phấn khởi về cuốn sách này. C# 3.0 Design Patterns mang thế giới trừu tượng thường gặp của design patterns tập trung mạnh vào thực tế C# 3.0 sẽ thực hiện. Tôi mong muốn được nhìn thấy nơi các nhà phát triển có thể đi cùng với những công cụ và bằng ngôn ngữ này, và với các mẫu hữu ích khác chúng ta có thể xây dựng cơ sở hạ tầng cho các ngôn ngữ tương lai.
Eric Lippert : Senior Developer C# Compiler Team Seattle, Washington.
November 30, 2007
Share by Trung Kien
Tài liệu bao gồm 3 chương và ebook tiếng anh C# 3.0 Design Pattern
- CHƯƠNG I: C# THÍCH HỢP DESIGN PATTERNS
- CHƯƠNG II: CÁC MẪU CẤU TRÚC: DECORATOR, PROXY, VÀ BRIDGE
- CHƯƠNG III: CÁC MẪU CẤU TRÚC: COMPOSITE VÀ FLYWEIGHT
Link Download: C# 3.0 Design Pattern
Bản xem trước ebook tiếng anh
Nội dung bài viết