Как правило, ответственность за поддержание логически согласованного и действительного внутреннего состояния лежит на классе. Например, Person
может иметь конструктор, который требует имя и фамилию, если операции с Person
не имеют смысла без этих данных.
Однако "логически непротиворечивый и действительный" отличается от "имеет смысл в области" , поэтому иногда ответственность внешнего класса заключается в обеспечении того, чтобы Правила домена соблюдаются . Например, PersonValidator
может потребовать, чтобы у Person
был номер телефона, который находится в США. Но Person
не обязательно должен знать что-либо о том, находится ли PhoneNumber
в США.
Хорошее практическое правило заключается в том, что если помимо данных, которые уже принадлежат этому классу, требуются правила состояния или домена, внешние по отношению к классу, вы можете рассмотреть возможность внешней проверки. Вы также можете централизовать проверку во внешнем классе, если состояние экземпляров класса может поступать из нескольких источников (например, базы данных, веб-формы, файла и т. Д.).