Where to put checkers? In Monitor or in Scoreboard?

I’m a bit confuse on where should I put my checkers. Should it be in the monitor or in the scoreboard?
Some people said that the function of the monitor is just to sample the interface and then convert it into transaction and then pass it to the scoreboard for checking… Some say that I can also put checkers in the monitor.

So I’m confuse. Which is a better way? In the monitor or in the scoreboard?
Please also explain why.

In my opinion, I would choose to put the checkers in the scoreboard. This is for the purpose of making my monitor reusable for other projects. The checkers can vary from project to project so if I put it inside the monitor then my monitor will only be applicable to that project. But if I put it in the scoreboard, then other projects can reuse my monitor and their checkers can be placed on the scoreboard.

Do you think my opinion is right? Are there any weakness in my plan?

Thank you for your thoughts.

In reply to Reuben:

You have to differentiate between what kind of checks you need to implement.

Low level checks, that verify that the protocol is working correctly should go into monitors. These are reusable across projects. A lot of the time such checks might also be implemented as assertions.

Checks that are project specific should be kept separate from the UVC codebase. Low level, DUT specific tests could be added to the monitor, as long as you implement monitor checks in a subclass of the original UVC monitor. High level checks (that depend on activity from multiple interfaces) would go into scoreboards.