If anything, valid? -> true|false, and initialize raises AE unless valid?

validate! also collects a list of issues for the exception, which I find really useful. "This is what's wrong!" rather than "Something's wrong. Find it, human!"

And if you do create a CC object, manipulate its #directives hash directly, you can call validate! and get the same exception as if you'd passed that hash in the first place.

So, in short, I see some aesthetic value in shuffling the validation logic around, but concrete losses in the interface.