Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Observer pattern trong lập trình C#

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    1

    Mặc định Observer pattern trong lập trình C#

    Làm sao sử dụng mô hình Observer đối với ứng dụng window form. Xin một đoạn mẫu code để khi thay đổi một giá trị trong main form, các form khác sẽ nhận thấy được.

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    79

    Trích dẫn Nguyên bản được gửi bởi laptrinhc97 Xem bài viết
    Làm sao sử dụng mô hình Observer đối với ứng dụng window form. Xin một đoạn mẫu code để khi thay đổi một giá trị trong main form, các form khác sẽ nhận thấy được.
    Nếu chỉ để làm điều này, chỉ cần dùng biến static là đủ, Observer là cái gì cao siêu quá, bạn nói rõ thêm cho mọi người cùng học hỏi với nhé.

    ccom

  3. #3
    Ngày gia nhập
    02 2008
    Bài viết
    1

    Observer Pattern là hình mẫu chung cho nhiều loại ngôn ngữ, để hiểu rõ hơn bạn tôi thấy bạn nên đọc: http://msdn2.microsoft.com/en-us/lib...attern_topic3a

    Đối với C# hay bất kỳ ngôn ngữ nào, người ta luôn thiết kế ngôn ngữ ở mức "tiện nghi cơ bản", để tránh ngôn ngữ bị phụ thuộc vào các phát minh hay pattern mới. Điều này có nghĩa là bạn có thể tự thiết kế một Observer framework dùng C#.

    Hình dung bạn có vài form, form chính của ứng dụng và vài form nhận giá trị từ form chính.

    - Ở form chính (MyMainForm) bạn sẽ khai báo một delegate và event.

    Code:
       //declare a delegate for the event
       public delegate void AskPriceDelegate(decimal aPrice);
       //declare the event using the delegate
       public event AskPriceDelegate AskPriceChanged;
    - MyMainForm của bạn có một nút, khi click bạn sẽ gởi một giá trị đến tất cả các form con có đăng ký nhận sự kiện
    Code:
       public void button1_Click(....) {
          if (AskPriceChanged != null)
              AskPriceChanged(28872);
       }
    - Ở form khác bạn làm thêm một constructor

    Code:
       private MyMainForm.AskPriceDelegate dlgAskPriceDelegate;
       public MyDialog(MyMainForm formInstance) {
          // đăng ký nhận sự kiện từ form chính
          dlgAskPriceDelegate = new MyMainForm.AskPriceDelegate(NotifyPriceChanged)
          formInstance.AskPriceChanged += dlgAskPriceDelegate;
       }
    - Tạo một method để gán giá trị vào label trên form

    Code:
       public void NotifyPriceChanged(decimal newValue) {
          myDialogLabelControl.Text = "Giá trị gởi từ MyMainForm = " + newValue;
       }

    - Khi đóng form, bạn phải chăn sự kiện FormClose để gỡ đăng ký

    Code:
      formInstance.AskPriceChanged += dlgAskPriceDelegate;

  4. #4
    Ngày gia nhập
    10 2006
    Bài viết
    107

    Bổ sung là cái pattern này ứng dụng cho framework MVC (Model [Là cái delegate và event phát sinh cùng dữ liệu cụ thể] + View [Form con] + Controller [Form cha]). Mình cũng đang nghiên cứu cái này, bạn nào có thêm ý kiến gì cứ bổ sung cho ngu kiến của mình
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  5. #5
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    Solokop chưa hiểu thấu đáo về MVC:
    UserView, Windows Form tất cả đều là View trong MVC
    Controller là class có liên hệ với GUI nhưng không tạo ra GUI mà chỉ control GUI
    Model là class không liên hệ gì đến GUI chỉ tạo ra môi trường liên kết giữa các COntroller và View.
    Controller và Model có thể viết tùy ý nhưng nên đúng ý nghĩa được mô tả trong mô hình MVC

    Trong java có Sping
    trong C# có CAB
    là những framework cho MVC
    Với C#, nếu viết model thì extend từ class WorkItem, nếu muốn viết controller thì extend từ class Controller

    Để dễ dàng thực hiện được ý tưởng từ các pattern thì nên tìm hiểu thêm nhiều library trong đó có cái CAB, Spring trên

  6. #6
    Ngày gia nhập
    10 2006
    Bài viết
    107

    Mặc định Observer pattern trong lập trình C#

    @ NguyenTuan2 : Có thể em chưa hiểu thấu đáo về MVC, vì hồi học Java em thấy nó có rất nhiều biến thế. Em chỉ hiểu nôm na cái mô hình MVC như sau :

    View : Là thành phần sẽ hiển thị thông tin lấy từ model
    Model : Là thành phần sẽ chứa thông tin sẽ được View lấy thông qua sự điểu khiển của controller
    Controller : Là thành phần sẽ điều khiển sự hiển thị của View với dữ liệu Model tương tự.

    Hồi học Java cũng cài đặt thành công rồi, nhưng em thấy nó có nhiều biến thể lắm, và một trong những biến thể đó có liên quan đến cái pattern này. Bro NguyenTuan nói thêm chi tiết về cái pattern này và MVC cái cho mọi người học hỏi.
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  7. #7
    Ngày gia nhập
    02 2008
    Bài viết
    2

    Mô hình MVC về cơ bản là giống với những gì mà mr Tuan nói.
    Mình bổ sung thêm chút cho dễ hình dung

    View : Những đối tượng dùng để hiển thị dữ liệu(winform,webform,control,...)
    Control : Những đối tượng dùng để kiểm soát các hành vi được thực hiện trên view(các class thực thi cách hành động xảy ra trên view).
    Model : Những đối tượng liên quan tới việc quản lý dữ liệu(thông thường được hiểu giống như DAL - Data Access Layer)

    Với Java thì mình nghĩ là mô hình chính xác phải là Spring MVC Framework. Spring còn nhiều thứ chả liên quan gì tới mô hình MVC.
    Với .Net thì mình cũng chưa tiếp cận CAB bao giờ,bạn có thể giới thiệu Framework đó được không?

    Best Regards!

  8. #8
    Ngày gia nhập
    11 2007
    Bài viết
    79

    Well done!

    Topic này cũng trả lời luôn câu hỏi của bạn nào hôm trước về delegate/event và ứng dụng của nó (giống kiểu con trỏ hàm trong C++).

    Nói chung, C# bổ sung một số từ khóa và khái niệm mới nhưng phương pháp tổng quát thì cũng không có gì cao siêu khó hiểu cả, tất cả vẫn chỉ xoay quanh 3 thứ đặc trưng của lập trình hướng đối tượng đã quen thuộc trong C++ và Java: Kế thừa, đóng gói và đa hình.

    Có những từ khóa và kỹ thuật ít khi cần dùng đến, vì làm theo cách truyền thống vẫn OK.

    ccom

  9. #9
    Ngày gia nhập
    04 2009
    Nơi ở
    Đà Nẵng
    Bài viết
    72

    Em cũng đang học cái môn này và thầy giáo nói mẫu này là mẫu rất quan trọng nên các pro chỉ thêm cho em với. Ai có ví dụ mẫu nào viết trên winform bằng c# thì up lên cho em để em dễ hình dung chứ mấy cái này mơ hồ quá! Em cảm ơn các pro nhiều hén!

Các đề tài tương tự

  1. Sử dụng reflection trong factory pattern như thế nào?
    Gửi bởi NostraNam trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 01-03-2012, 05:14 PM
  2. DesignPattern | Composite pattern trong lập trình C#
    Gửi bởi nhc1987 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 11
    Bài viết cuối: 04-05-2011, 07:15 AM
  3. Template Method trong Desgin Pattern
    Gửi bởi ten_truycap trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 07-11-2010, 08:45 AM
  4. Dùng vòng lặp để tao pattern trong C++ như thế nào?
    Gửi bởi genvfx trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 17-09-2010, 08:35 AM
  5. Nghiên cứu về Design Pattern trong lập trình và sản xuất phần mềm. (vesion 1)
    Gửi bởi Kevin Hoang trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 04-08-2010, 11:11 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn