У меня есть сложная модель домена, построенная поверх устаревшей системы, на которой я построил большинство методов «get» - обычно просто передавая идентификаторы первичного ключа базы данных. Достаточно легко. Мне сейчас любопытно, как подойти к задаче создания новых объектов в базе данных и сохранения существующих с новыми данными, и я хочу, чтобы я покрывал все свои базы.Объектно-ориентированный дизайн: Сохранение сложных объектов
Основные объекты домена, соответствующие объектам в базе данных около 20-25 для всего проекта. Около 10 или около того необходимо будет сохранить (остальное только для поддержки данных и не нуждается в обновлении пользователем). Объекты, которые должны быть сохранены, имеют сложные зависимости. Объект A имеет список объектов B, который содержит объекты C, D и E, например, все они могут быть сохранены, когда исходный объект A есть.
Я хотел бы его построить, поэтому его легко использовать разработчиком пользовательского интерфейса, но также обеспечивает сохранение только достоверных данных (скажем, возможно, объект B не может сохранить, если объект C не находится в допустимом состоянии). Это заставляет меня уклоняться от того, чтобы позволить им создать объект с нуля и попытаться его сохранить. Я хочу следовать принципу, что объекты должны быть живыми только в правильном состоянии.
Другая альтернатива - использование методов «CreateNew» и «Save» для объектов службы, которые обрабатывают их, но список параметров для таких методов был бы вопиющим.
Я думаю о необходимости «CreateNew» и «Сохранить», чтобы принять что-то вроде объекта команды, который они могут создавать и передавать, чтобы они точно знали, какие данные необходимы и что они не могут контролировать. Я читал на command pattern, но мне не нужны никакие основные льготы, которые он предоставляет.
Какие соображения следует принимать при выборе подхода? Это C# 3.5, если это вообще влияет на него.
Я думал о проверке их, но проблема приходит с частью «старой системы»: хотя я могу читать из базы данных по своему усмотрению, она должна проходить через веб-службу при сохранении. К сожалению, он не может напрямую писать в базу данных. – Chris
Хм, несчастливо. У меня нет опыта в этом, хотя кто-то задал здесь вопрос об этом, который может быть интересным: http://stackoverflow.com/questions/1202178/incorporating-orm-into-a-semi-soa-architecture. –
Приятная находка, искала такую ссылку. Благодаря! – Chris