ASP.net MVC: Где в моем дизайне я должен создавать / объявлять ключи сущностей?
При создании нового объекта сущности, который имеет значение внешнего ключа, мне нужно создать новый ключ Entity (Entity Framework в.net 3.5) для объекта, но у меня возникают проблемы с решением, где в моем приложении я должен это сделать.
Прямо сейчас, когда я создаю новую запись с внешним ключом, я создаю ключ сущности в контроллере (в данном случае это идентификатор пользователя, полученный от поставщика членства), назначаю его объекту и передаю его на уровень обслуживания репозитория.
Есть ли какие-либо проблемы с этим, или я должен передать объект плюс идентификатор пользователя на уровень сервиса репозитория и иметь дело с созданием ключа объекта? Прохождение одного объекта кажется чище, но наличие нескольких контроллеров, назначающих ключи таким образом, заставляет меня нервничать. Благодарю.
1 ответ
Я думаю, что это вопрос разделения интересов. Репозиторий занимается поиском и добавлением / изменением / удалением сущностей. Он не должен отвечать за создание объектов. И наоборот, контроллер действительно не должен отвечать за построение сущностей (контроллер должен выполнять весь объем работы, необходимой для передачи данных в представление и обработки команд из представления, делегировать эти команды бизнес-логике... бизнес Логика принадлежит в другом месте (например, в домене). Честно говоря, вы должны создать некоторый EntityBuilder для обработки процесса создания сущностей. Вы передадите объект плюс идентификатор пользователя разработчику, который затем предоставит вам полностью созданный объект, который затем можно будет передать в хранилище.
РЕДАКТИРОВАТЬ:
Даже с вашим изменением с "Репозиторий" на "Сервисный уровень" принципал остается прежним. Делегируйте процесс создания вашей сущности выделенному строителю и поддерживайте разделение интересов.