|
|
Trang chủ
>
Diễn đàn .NET Việt Nam
>
Công nghệ nền tảng .NET/Mono
>
Căn bản về .NET Framework | | | | |
Chuyên đề Design Patterns (hàng độc chiêu)
| 12974
/
39 |  | Trần Bình Trọng Thành viên mới | | Đăng ký:
27/03/2006 Tham gia:
27/03/2006 Điểm:
699 Bài:
156 |
|
| Gửi lúc:
08/09/2007 11:10:16 AM
-
Quỳnh Nguyễn
sửa đổi lúc:
03/04/2008 12:39:02 AM | |
- Mình biên tập chuyên đề về "Mẫu thiết kế" này với mong muốn được chia sẽ kiến thức với mọi người. Hiện mình đang nghiên cứu 2 bộ Design Patterns của nhóm GANG OF FOUR và bộ Enterprise Library. Với hi vọng cùng nhau phát triền, mong mọi người chung tay cho chủ đề này.
- Trong tháng này mình sẽ hoàn thành bộ Design Patterns của nhóm GANG OF FOUR. Mình sẽ pop lên cho mọi người tham khảo
|
| | Trần Bình Trọng Thành viên mới | | Đăng ký:
27/03/2006 Tham gia:
27/03/2006 Điểm:
699 Bài:
156 |
|
| Gửi lúc:
08/09/2007 11:13:33 AM
-
Trần Bình Trọng
sửa đổi lúc:
08/09/2007 11:18:59 AM | | Nhập cuộc!
- Trong công nghệ phần mềm, một mẫu thiết kế là một
giải pháp tổng thể cho các vấn đề chung trong thiết kế phần mềm. Một
mẫu thiết kế không phải là một thiết kế hoàn thiện để mà có thể được
chuyển đổi trực tiếp thành mã; nó chỉ là một mô tả hay là sườn
(template) mô tả cách giải quyết một vấn đề mà có thể được dùng trong
nhiều tình huống khác nhau. Các mẫu thiết kế hướng đối tượng thường cho
thấy mối quan hệ và sự tương tác giữa các lớp hay các đối tượng, mà
không cần chỉ rõ các lớp hay đối tượng của từng ứng dụng cụ thể. Các
giải thuật không được xem là các mẫu thiết kế, vì chúng giải quyết các
vấn đề về tính toán hơn là các vấn đề về thiết kế.
- Đây thực sự
là 1 nghệ thuật, tiếp nhận nó về tư tưởng là chính, nó rất "khó nhai".
Chi phí làm 1 chương trình với DP là rất lớn, vì vậy DP cũng ít áp dụng
trong program bình thường. Chỉ những công ty lớn mới bỏ thời gian ra
nghiên cứu trong những program quan trọng, còn những công ty nhỏ viết
chương trình ra chạy được là ok rồi . Bù lại program viết bằng DP chỉ
cần sửa rất ít là ra chương trình mới.
- Nhiều người rất ghét DP, cho nó là thứ bỏ đi vì họ thấy không cần DP thì vẫn viết chương trình chạy tốt.
-
1 ví dụ về program Design Pattern: Viết 1 chương trình chơi cờ sao cho
chơi được nhiều loại cờ (cờ Vua, cờ Tướng, cờ Nhảy). Nếu bạn thiết kế
tốt thì bạn chỉ cần viết kỹ 1 loại cờ (giả sử Cờ Vua) rồi viết thêm
loại cờ mới (Cờ tướng) bạn chỉ cần định nghĩa lại: Kích thước bàn cờ,
định nghĩa các loại quân của cờ tướng là program chạy ok. Còn phương
pháp xứ lý khi chơi thì được tái sử dụng lại.
- Design Patterns
đưa ra các giải pháp chuẩn và các qui ước đặt tên cho các vấn đề chung
trong thiết kế phần mềm. Các tác giả của cuốn sách GANG OF FOUR là
Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides, hay còn
được biết đến với các tên "Gang of Four" hay đơn giản là
|
| | Trần Bình Trọng Thành viên mới | | Đăng ký:
27/03/2006 Tham gia:
27/03/2006 Điểm:
699 Bài:
156 |
|
| Gửi lúc:
08/09/2007 01:56:06 PM
-
Trần Bình Trọng
sửa đổi lúc:
08/09/2007 01:58:46 PM |  | | Các mẫu thiết kế trong catalog
- Catalog của chúng ta bao gồm 23 mẫu thiết kế. Dưới đây, chúng được liệt kê theo tên gọi và mục đích để giúp bạn có được cái nhìn sơ bộ về từng mẫu.
Abstract Factory. Cung cấp giao diện để khách hàng có thể tạo ra những nhóm đối tượng có liên quan hoặc phụ thuộc lẫn nhau mà không cần phải chỉ định rõ chúng thuộc những lớp cụ thể nào.
Adapter. Hoán chuyển giao diện của một lớp thành một giao diện khác theo yêu cầu của phía khách. Adapter cho phép những lớp có giao diện không tương thích cùng làm việc chung với nhau.
Bridge. Tách biệt phần trừu tượng và phần cài đặt thành 2 phần riêng rẽ, nhờ đó chúng có thể biến đổi độc lập.
Builder. Tách riêng quá trình kiến tạo nên một đối tượng phức tạp khỏi phần trình bày của nó, nhờ đó cùng một quá trình kiến tạo có thể dùng để tạo ra những phần trình bày khác nhau.
Chain of Responsibility. Gỡ bỏ sự trói buộc đối tượng gửi yêu cầu sử lý với một đối tượng nhận yêu cầu, bằng cách tạo điều kiện để nhiều hơn một đối tượng có thể tiếp nhận và sử lý yêu cầu đó. Ðể đạt được điều đó, những đối tượng nhận yêu cầu được kết nối với nhau thành một chuỗi, và yêu cầu sẽ được truyền dọc theo chuỗi đó cho đến khi có một đối tượng nào đó tiếp nhận nó.
Command. Gói gọn mỗi lời yêu cầu trong một đối tượng. Nó cho phép bạn gửi những lời yêu cầu khác nhau (dưới dạng các đối tượng) đến những đối tượng mà bạn không cần phải biết trước về những phương thức của chúng.
Composite. Sắp xếp các đối tượng theo cấu trúc cây để tạo ra một hệ thống phân cấp nguyên phân (part- whole hierarchy). Composite cho phép phía khách đối sử với những đối tượng riêng rẽ và những đối tượng đa hợp một cách đồng nhất.
Decorator. Gắn thêm trách nhiệm cho một đối tượng khi chương trình đang thực thi. Decorator cung cấp một giải pháp thay thế linh động hơn là thừa kế lớp để mở rộng thêm chức năng cho các lớp.
Facade. Cung cấp một giao diện đồng nhất cho tập hợp các giao diện trong một hệ thống phụ. Facade định nghĩa giao diện ở mức độ cao hơn, nhờ đó hệ thống phụ trở nên dễ sử dụng hơn.
Factory Method. Định nghĩa giao diện để tạo ra một đối tượng, nhưng lại để cho những lớp con quyết định nên tạo tao ra đối tượng từ những lớp nào. Factory Method cho phép một lớp nhường lại việc tạo ra các đối tượng cho các lớp con.
Flyweight. Sử dụng phương pháp "chia sẻ" để hỗ trợ một số lượng lớn các đối tượng hạt giống.
Intepreter. Dùng để biểu diễn thành phần ngữ pháp của một ngôn ngữ, dồng thời nó cũng tạo ra phần thông dịch để dịch những câu cú của ngôn ngữ đó theo những quy tắc ngữ pháp.
Iterator. Cung cấp cách thức để truy cập đến những phần tử của một đối tượng tập hợp (aggregate object) một cách tuần tự mà không cần đối tượng đó phải phơi bày những chi tiết ra bên ngoài.
Mediator. Dùng một đối tượng để bao bọc tất cả những mối tương tác giữa một tập hợp các đối tượng. Mediator khuyến khích việc gán ghép lỏng các đối tượng với nhau bằng cách giữ không cho chúng tương tác trực tiếp với nhau, nhờ đó bạn có thể biến đổi những mối tương tác đó một cách độc lập.
Memento. Nắm bắt và xuất ra ngoài trạng thái bên trong của một đối tượng sao cho sau đó chúng ta có thể dễ dàng phục hồi lại trạng thái đó. Memento làm công việc đó mà không vi phạm tính bao bọc của dữ liệu.
Observer. Định nghĩa mối quan hệ một-nhiều giữa các đối tượng sao cho khi một đối tượng thay đổi trạng thái của nó thì tất cả các đối tượng còn lại cũng được thông báo về sự thay đổi đó và tự động cập nhật.
Prototype. Quy định những dạng loại đối tượng được sinh ra dựa theo một đối tượng mẫu. Prototype tạo ra các đối tượng mới bằng cách copy từ đối tượng mẫu.
Proxy. Uỷ nhiệm quyền truy cập đến một đối tượng cho một đối tượng khác.
Singleton. Bảo đảm một lớp chỉ có thể có duy nhất một instance, và cung cấp quyền truy cập đến đối tượng đó ở phạm vi toàn cục.
State. Cho phép một đối tượng thay đổi hành vi của mình khi trạng thái bên trong của nó thay đổi. Khi đó đối tượng giống như là thay đổi lớp vậy.
Strategy. Định nghĩa một dòng họ các giải thuật, bao bọc mỗi giải thuật bằng một đối tượng và làm cho chúng có thể thay thế lẫn nhau. Strategy giúp cho giải thuật có thể biến đổi một cách độc lập, không gây ảnh hưởng đến khách hàng sử dụng nó.
Template Method. Định nghĩa bộ xương cho một thuật toán bên trong một phương thức của lớp, và nhường lại một số công việc cho các lớp con. Template Method cho phép các lớp con tái định nghĩa một số phần trong thuật toán mà không làm thay đổi cấu trúc của thuật toán đó.
Visitor. Thể hiện một thao tác cần phải thực hiện trên các phần tử của một cấu trúc đối tượng. Visitor cho phép bạn định nghĩa một thao tác mới mà không cần phải thay đổi các lớp của những phần tử đó. |
| | Trần Bình Trọng Thành viên mới | | Đăng ký:
27/03/2006 Tham gia:
27/03/2006 Điểm:
699 Bài:
156 |
|
| Gửi lúc:
08/09/2007 02:01:35 PM
-
Trần Bình Trọng
sửa đổi lúc:
08/09/2007 02:06:10 PM |  | |
|
|
|
|
|
|
| DESIGN PATTERNS LIST |
|
|
|
|
|
|
|
| GANG OF FOUR |
|
|
|
|
|
|
|
| STT |
Name |
Readed |
Reading |
Not read |
|
| Creational patterns |
|
| 1 |
Abstract Factory |
X |
|
|
|
| 2 |
Builder |
|
X |
|
|
| 3 |
Factory Method |
X |
|
|
|
| 4 |
Prototype |
X |
|
|
|
| 5 |
Singleton |
X |
|
|
|
| Structural patterns |
|
| 6 |
Adapter |
|
|
X |
|
| 7 |
Bridge |
|
|
X |
|
| 8 |
Composite |
|
|
X |
|
| 9 |
Decorator |
|
|
X |
|
| 10 |
Facade |
|
X |
|
|
| 11 |
Flyweight |
X |
|
|
|
| 12 |
Proxy |
|
X |
|
|
| Behavioral Patterns |
|
| 13 |
Chain Of Responsibility |
|
|
X |
|
| 14 |
Command |
X |
|
|
|
| 15 |
Interpreter |
|
|
X |
|
| 16 |
Iterator |
|
X |
|
|
| 17 |
Mediator |
|
|
X |
|
| 18 |
Memento |
X |
|
|
|
| 19 |
Observer |
|
|
X |
|
| 20 |
State |
X |
|
|
|
| 21 |
Strategy |
X |
|
|
|
| 22 |
Template Method |
|
|
X |
|
| 23 |
Visitor |
|
|
X |
|
|
|
|
|
|
|
| ENTERPRISE APPLICATION |
|
|
|
|
|
|
|
| STT |
Name |
Readed |
Reading |
Not read |
|
| Domain logic |
|
| 1 |
Transaction Script |
X |
|
|
|
| 2 |
Domain Model |
X |
|
|
|
| 3 |
Table Module |
|
|
X |
|
| 4 |
Service Layer |
|
|
X |
|
| Data Source Architectural |
|
| 5 |
Table Data Gateway |
X |
|
|
|
| 6 |
Row Data Gateway |
X |
|
|
|
| 7 |
Active Record |
X |
|
|
|
| 8 |
Data Mapper |
X |
|
|
|
| Object – Relational Behavioral |
|
| 9 |
Unit Of Work |
X |
|
|
|
| 10 |
Identity Map |
X |
|
|
|
| 11 |
Lazy Load |
X |
|
|
|
| Object – Relational Structural |
|
| 12 |
Identity Field |
|
|
X |
|
| 13 |
Foreign Key Mapping |
|
|
X |
|
| 14 |
Dependent Mapping |
|
|
X |
|
| 15 |
Embedded Value |
|
|
X |
|
| 16 |
Serialized LOB |
|
|
X |
|
| 17 |
Single Table Inheritance |
|
|
X |
|
| 18 |
Class Table Inheritance |
|
|
X |
|
| 19 |
Concrete Table Inheritance |
|
|
X |
|
| 20 |
Inheritance Mappers |
|
|
X |
|
| Object – Relational Metadata Mapping |
|
| 21 |
Metadata mapping |
|
|
X |
|
| 22 |
Query Object |
X |
|
|
|
| 23 |
Repository |
|
|
X |
|
| Web Presentation |
|
| 24 |
Model View Controller |
|
|
X |
|
| 25 |
Page Controller |
|
|
X |
|
| 26 |
Front Controller |
|
|
X |
|
| 27 |
Template View |
|
|
X |
|
| 28 |
Transform View |
|
|
X |
|
| 29 |
Two Step View |
|
|
X |
|
| 30 |
Application View |
|
|
X |
|
| Distribution |
|
| 31 |
Remote Facade |
|
|
X |
|
| 32 |
Data Transfer Object |
|
|
X |
|
| Offline Concurrency |
|
| 33 |
Optimistic Offline Lock |
X |
|
|
|
| 34 |
Pessimistic Offline Lock |
X |
|
|
|
| 35 |
Coarse-Grained Lock |
|
|
X |
|
| 36 |
Implicit Lock |
|
|
X |
|
| Session State |
|
| 37 |
Client Session State |
|
|
X |
|
| 38 |
Server Session State |
|
|
X |
|
| 39 |
Database Session State |
|
|
X |
|
| Base Patterns |
|
| 40 |
Gateway |
|
|
X |
|
| 41 |
Mapper |
|
|
X |
|
| 42 |
Layer Supertype |
|
|
X |
|
| 43 |
Separated Interface |
|
|
X |
|
| 44 |
Registry |
X |
|
|
|
| 45 |
Value Object |
|
|
X |
|
| 46 |
Money |
|
|
X |
|
| 47 |
Special Case |
|
|
X |
|
| 48 |
Plugin |
|
|
X |
|
| 49 |
Service Stub |
|
|
X |
|
| 50 |
Record Set |
|
|
X |
|
|
|
|
|
|
|
|
| | Trần Bình Trọng Thành viên mới | | Đăng ký:
27/03/2006 Tham gia:
27/03/2006 Điểm:
699 Bài:
156 |
|
| Gửi lúc:
08/09/2007 02:09:02 PM |  | | | Trên đây là tiến độ mà mình đang nghiên cứu, với những Patterns đã nghiên cứu, mình đã lưu tài tiệu lại, mình sẽ pop lên hàng ngày cho mọi người |
| | Phạm Hải Thành viên mới | | Đăng ký:
26/07/2007 Tham gia:
26/07/2007 Điểm:
208 Bài:
52 |
|
| Gửi lúc:
08/09/2007 03:04:22 PM |  | | uh! đúng là hàng độc chiêu thật... bác up tiếp cho a e nhé Thanks |
| | Kim Khanh Mới học .NET | | Đăng ký:
12/02/2006 Tham gia:
12/02/2006 Điểm:
45 Bài:
11 |
|
| Gửi lúc:
09/09/2007 09:14:07 PM |  | | Tôi cũng đang nghiên cứu nhưng thấy khó quá. Anh có cuốn "Professional C# Design Patterns Applied 2003.pdf" của thằng Wrox không? Nếu có thì share cho tôi với. GM: itjunkie@gmail.com Tôi chỉ tìm được chương 3 của cuốn này thôi. |
| | Trần Bình Trọng Thành viên mới | | Đăng ký:
27/03/2006 Tham gia:
27/03/2006 Điểm:
699 Bài:
156 |
|
| Gửi lúc:
10/09/2007 11:14:20 AM |  | | | Để có kiến thứ vững chắc trước khi vào DP thì các bạn nên xem lại các phần cơ bản về ngôn ngữ (ở đây mình chuyên về C#) các bạn có thể Download cuốn |
|
|
| | | | | Chủ đề mới: | cho mình hỏi câu cơ bản tí thanks trước nhé
(75/1)
Bắt đầu học Dot Net như thể nào?
(9273/48)
Điểm khác nhau giữa hai đoạn code
(420/4)
Giải phóng bộ nhớ
(1390/3)
Xin chương trình dịch ngược mã nguồn của .NET ?
(7214/23)
LAP TRINH HUONG DOI TUONG
(3514/18)
convert từ .net framework 1.1 sang framework 2.0
(188/2)
 | | | Chủ đề khác: | | Mới học .Net
(716/3)
Test Automation???
(2596/8)
System.IO.Directory.Move
(1094/3)
Căn bản về .NET
(14780/20)
Tự học C# căn bản.
(3088/6)
net framework 3.5 configuration tool?
(1582/1)
Socket and Port
(1690/5)
|  | |
|
|
|