Прямо сейчас у меня есть сущность домена с именем StyleBundle. Это StyleBundle занимает список стилей:
public class StyleBundle
{
public StyleBundle(List<Style> styles)
{
this.Styles = styles;
}
public IEnumerable<Style> Styles { get; private set;}
}
Итак, в моем оригинальном дизайне никогда не следует создавать StyleBundle с пустым списком стилей. Это правило, которое эксперты по доменам в основном считают хорошим.
Я написал это с помощью выражения guard в конструкторе:
if (styles.Count() == 0)
throw new Exception("You must have at least one Style in a StyleBundle.");
, который убедился, что я не могу создать StyleBundle в недопустимом состоянии. Я думал, что здесь имеет смысл исключение, потому что StyleBundle, созданный без хотя бы одного стиля, был исключительным в системе.
Конечно, изменения произошли в течение остальной части проекта, и теперь у пользователя должна быть возможность создавать StyleBundle без стилей, но им нельзя разрешать PERSIST StyleBundle без стилей.
Так что теперь я смотрю на свое охранное предложение и понимаю, что больше не могу выбросить исключение из конструктора.
В дальнейшем у меня есть слой Service / Application, с которым взаимодействуют мои программные компоненты при работе с StyleBundles. В моем слое обслуживания у меня есть класс StyleBundleService, и этот класс предоставляет базовую функциональность пользовательскому интерфейсу ... среди них "CreateStyleBundle".
Похоже, мне нужно будет проверить мою Service Layer, чтобы увидеть, есть ли у StyleBundle какие-либо стили, прежде чем он будет сохранен в базе данных, но что-то в этом решении мне кажется "неправильным".
Кто-нибудь сталкивался с подобной вещью? В основном, различие между состоянием объекта, действительного, когда «новый» вверх, и состоянием того же объекта, когда дело доходит до постоянства?
Спасибо!
Mike