Mẫu thiết kế nào phù hợp hơn để đăng nhập?


10

Tôi nên đăng nhập một số sự kiện trong một chương trình nhưng theo tôi biết sẽ tốt hơn nếu giữ mã đăng nhập bên ngoài chương trình vì đó không phải là về chức năng thực sự của chương trình. Vì vậy, bạn có thể cho tôi biết nếu tôi nên giữ nó hoàn toàn không có mã và chỉ sử dụng Người quan sát và Người nghe để ghi nhật ký sự kiện? Hoặc tôi có thể thêm một dòng mã như sau bất cứ nơi nào tôi cần để đăng nhập một cái gì đó:

MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99));

Tôi có phạm sai lầm khi sử dụng mẫu thiết kế Observer không? Tôi cần một mẫu thiết kế khác? Hoặc tôi nên ngừng suy nghĩ về các mẫu thiết kế?

PS1. Nếu tôi muốn đăng nhập chỉ sử dụng người nghe và người quan sát, tôi chắc chắn sẽ cần phải thêm và cải thiện người quan sát và người nghe chương trình.

PS2. Tôi chắc chắn biết rằng có các thư viện khác nhau để đăng nhập Java và tôi đang sử dụng java.utils.logging nhưng tôi cần phải có một trình bao bọc cho nó để ghi nhật ký các đối tượng đặc biệt của mình.


2
Java đã có 17 khung ghi nhật ký và khung ghi nhật ký meta (slf4j) và có thể một số khung ghi nhật ký meta-meta và không có khung nào trong số chúng hoạt động cho bạn?
kevin cline

Câu trả lời:


15

Loggingthường được thực hiện với mô hình Chuỗi trách nhiệm . Tất nhiên bạn có thể (và tôi sẽ) kết hợp điều đó với Mặt tiền . Tôi thực sự sẽ không sử dụng Listener (s) hoặc Observer (s).

Chuỗi trách nhiệm - Logger


Đây có phải là về cơ bản nói "ghi vào logger trừu tượng trong mã của bạn"? Tôi đoán câu hỏi của tôi là: tôi có nên kích hoạt các sự kiện từ nơi tôi muốn đăng nhập và cung cấp cho người nghe đăng nhập để phản hồi các sự kiện hay tôi nên gọi thẳng dịch vụ Logger của mình (sử dụng chuỗi phản hồi trong nội bộ) và đó có phải là nó không?
Fire-Dragon-DoL

8

Sử dụng lập trình hướng đối tượng sử dụng lời khuyên sau, trước và xung quanh các phương thức. Ở đó, theo nhu cầu của bạn, bạn có thể thêm nhật ký trước khi bắt đầu api, sau hoặc trên một số điều kiện và cũng có thể tách mã chính của bạn khỏi mã đăng nhập.


0

Vâng, Observer âm thanh không phù hợp với tôi. Ngoài ra, việc ném các cuộc gọi logger "bất cứ nơi nào bạn cần" sẽ phá vỡ mã của bạn và vi phạm SRP.

Bạn có thể - ví dụ - quan tâm đến AOP cho việc này, vì vậy bạn có thể đính kèm các cuộc gọi logger thông qua các chú thích phương thức.


0

Chuỗi trách nhiệm dường như là một mô hình tốt khi đầu ra của bạn có thể hạ cánh ở nhiều nơi. Trong UML, bạn có một bộ ghi nhật ký khác nhau hướng đến bàn điều khiển, khác với bộ ghi lỗi và thứ 3 đơn giản là bộ ghi thông tin.

Thông thường tôi đã thấy rằng logLevels khác nhau nhưng tệp nhật ký là như nhau.

Tôi không thấy mô hình quan sát là xấu khi đăng nhập vì nó tách mã đăng nhập của bạn khỏi mã ứng dụng. Đó là một thực hành tốt, di chuyển đến các cơ chế đăng nhập khác nhau là cách dễ dàng. Mỗi khi bạn muốn đăng nhập, hãy khởi động một sự kiện và người nghe thích hợp sẽ nhận được sự kiện đó và đăng nhập nó. Cần có một đối tượng singleton trung gian chứa danh sách tất cả các thanh ghi.

Bằng cách này, tôi thấy rằng chúng ta có thể tách mã đăng nhập của mình khỏi mã ứng dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.