Personally, i'd move your validate check into the model.
E.g.
public interface IClass{
bool ShouldValidate();
}
Then, in each class:
public class Class200
{
public bool ShouldValidate() => false; // because whatever
}
Then in your validate:
public void Validate(IClass class)
{
if(class.ShouldValidate())
{
// do whatever
}
}
This way the logic belongs to the IClass
instances, and anyone willing to extend this knows exactly how to implement the exception.
Also, for classes 200-300, you can inherit them from a common base class that always returns false
to have a DRY pattern.
Update Another option is putting validate inside the class directly, e.g. like so:
public interface IClass{
void Validate();
}
Then just leaving the method empty in classes 200-300, e.g.
public class Class200
{
public bool Validate()
{
}
}
and implement where needed
public class Class1
{
public bool Validate()
{
// do awesome things here
}
}