2009-08-21 2 views
12

Ứng dụng tôi đang thực hiện yêu cầu ghi nhật ký các hành động, người dùng thực hiện tác vụ và thời gian tác vụ vào cơ sở dữ liệu.Bạn sẽ cân nhắc mẫu thiết kế nào khi cần đăng nhập?

Những mẫu thiết kế là phổ biến nhất/thích hợp cho khai thác gỗ?

Tôi đang nghĩ đến Mẫu lệnh yêu cầu người dùng hiện tại và hành động. Thực hiện hành động và ghi vào nhật ký.

Bạn nghĩ gì? Bất kỳ lựa chọn thay thế khác tôi có thể xem xét?

Cảm ơn bạn.

Trả lời

10

Bạn có thể sử dụng AOP để áp dụng ghi nhật ký mà không có bất kỳ hành vi xâm nhập nào. AOP có thể giống như một hỗn hợp của Proxy và Decorator Pattern.

+0

Yup, AOP chắc chắn là một tùy chọn. Cảm ơn vì đã nhắc tôi. – Henry

+0

Các từ ... mà không có bất kỳ hành vi xâm nhập nào .. nổi bật với tôi. Nên xảy ra trong nền và ứng dụng của bạn không nên dựa vào "khi" các bản ghi sẽ được viết. – Mukus

2

Tôi đồng ý, tôi nghĩ rằng mô hình lệnh sẽ phù hợp với hầu hết vì bạn sẽ có tất cả các hành động được liệt kê.

Nhưng tôi không nghĩ rằng bạn thực sự cần phải làm theo một mô hình cụ thể thiết kế cho one.You này chỉ đơn giản có thể thiết lập một cuộc gọi lại vào hành động để cập nhật các bản ghi. Nó phụ thuộc vào kiến ​​trúc và công nghệ của bạn nhưng trong đầu tôi, mẫu lệnh có vẻ như quá mức cần thiết.

+0

Cảm ơn, tôi đã nghĩ đến việc sử dụng các cuộc gọi lại đơn giản, nhưng có vẻ như sẽ khó có được 'người dùng' từ ứng dụng trừ khi mọi hành động trong User là đối số. – Henry

1

Lệnh mẫu âm thanh tốt. Nó đặc biệt cho phép bạn chuyển logger tới lệnh và để cho lệnh thực hiện thao tác đăng nhập trên logger. Bằng cách này, bạn có thể có từng hành động chăm sóc để định dạng bản thân nhật ký và nếu một số hành động không được ghi lại hoặc cần thông tin đặc biệt mà kiến ​​trúc tổng thể của bạn không cần biết về nó. Nhược điểm là khớp nối các hành động với trình ghi nhật ký nếu bạn muốn ngăn chặn điều này, bạn có thể cho mọi hành động một phương thức trả về một chuỗi nhật ký cần được thêm vào.

Nếu bạn sẽ có nhiều hành động khác nhau, tôi không nghĩ rằng điều này là quá mức cần thiết, nếu đó chỉ là hành động của cơ sở dữ liệu và bạn có thể có khung cơ sở dữ liệu thực hiện các hành động ở mọi hành động cơ sở dữ liệu, nó có thể tái phát minh một cơ chế ghi nhật ký nhưng vì marcgg chỉ ra điều này phụ thuộc vào kiến ​​trúc của bạn.

4

Không conflate Command và ghi nhật ký Memento.

Lệnh là nội dung được thực hiện. Trong đó có thể bao gồm một số khía cạnh phổ biến trên tất cả các lệnh, bao gồm viết một mục nhật ký.

Mục nhập nhật ký có thể là Memento hoặc bản tóm tắt của Memento.

Trình ghi nhật ký là một loại Nhà máy, tạo ra Vật lưu niệm cho các sự kiện đã đăng nhập.

Như với hầu hết mọi thứ, bạn có một số lượng lớn các mẫu thiết kế lồng vào nhau. Mẫu "một" nào "phổ biến nhất/thích hợp" không được nhập vào đó.

Câu hỏi đặt ra là "những gì được cho là xảy ra?"

+5

để tham khảo: "Mẫu vật lưu niệm là mẫu thiết kế phần mềm cung cấp khả năng khôi phục đối tượng về trạng thái trước đó" http://en.wikipedia.org/wiki/Memento_pattern – marcgg

4

Mẫu quan sát rất thích hợp cho khung ghi nhật ký. Bạn có thể có lớp Logger mở rộng Quan sát, và các lớp con như đăng nhập vào bàn điều khiển, đăng nhập vào Cơ sở dữ liệu và đăng nhập vào Hệ thống tệp vv và mỗi lớp con triển khai Observer. Bây giờ bất cứ khi nào một thông điệp tường trình được ghi lại, tất cả các lớp quan sát được đăng ký với lớp Logger sẽ được thông báo sao cho mỗi lớp Child cũ: log to console sẽ ghi thông điệp vào bàn điều khiển. Ngoài ra lớp Logger có thể theo mẫu Singleton để đảm bảo một phiên bản của Logger có sẵn thông qua ứng dụng.

+0

Tôi đã sử dụng mẫu này cho trường hợp này một vài năm trước ... Việc ghi nhật ký vẫn hoạt động tốt. –