У меня сложная модель предметной области, построенная поверх унаследованной системы, для которой я построил большинство методов «get» - обычно просто путем передачи идентификаторов первичного ключа базы данных. Достаточно просто. Теперь мне любопытно, как подойти к задаче создания новых объектов в базе данных и сохранения существующих с новыми данными, и хочу убедиться, что я охватил все свои базы.
Основные доменные объекты, которые соответствуют сущностям в базе данных, насчитывают около 20-25 для всего проекта. Приблизительно 10 или около того должны быть сохранены (остальные только для поддержки данных и не нуждаются в обновлении пользователем). Сохраняемые объекты имеют сложные зависимости - у объекта A есть список объектов B, который, например, содержит объекты C, D и E, и все из них, возможно, потребуется сохранить, когда исходный объект A равен.
Я хотел бы построить его так, чтобы он был прост в использовании разработчиком пользовательского интерфейса, но также обеспечивал сохранение только допустимых данных (допустим, что объект B не может быть сохранен, если объект C не находится в допустимом состоянии). Это заставляет меня уклоняться от того, чтобы позволить им создавать объект с нуля и пытаться сохранить его - я хочу следовать принципу, что объекты должны когда-либо существовать только в действительном состоянии.
Другой альтернативой является предоставление методов «CreateNew» и «Save» для сервисных объектов, которые их обрабатывают, но список параметров для таких методов будет вопиющим.
Я думаю о том, что «CreateNew» и «Save» должны принимать что-то наподобие командного объекта, который они могут создавать и передавать, чтобы они точно знали, какие данные необходимы и что они не могут пытаться контролировать. Я прочитал о шаблоне команды , но мне не нужны никакие основные привилегии, которые он предоставляет.
Какие соображения я должен принять решение о подходе? Это C # 3.5, если это вообще учитывается.