Я немного борюсь с репозиториями. Я использую C # и NHibernate. У меня вопрос: сколько должен делать мой репозиторий, прежде чем он вызовет сохранение или получение?
Например, у меня есть пользовательский класс, который является совокупным корнем. Я хочу вызвать метод с именем «register», который добавит пользователя и установит некоторые значения по умолчанию на основе бизнес-правил и создаст некоторые другие объекты, которые также являются частями корневого элемента «user» (т. Е. Адрес, группы и т. Д.). Должен ли я позвонить
userRepo.Register(newUser);
что будет (игнорируя очевидные проблемы):
Regsiter(User newUser){
newUser.SomeProp = "Default Data";
Group g= new Group;
g.SomeProp2 = "Default Data";
newUser.Groups.Add(g);
Session.Save(g);
Session.Save(newUser);
}
или я должен поставить регистр на бизнес-уровне и сделать это:
Regsiter(User newUser){
newUser.SomeProp = "Default Data";
Group g= new Group;
g.SomeProp2 = "Default Data";
newUser.Groups.Add(g);
userRepo.Register(newUser, g);// this does session.save on both objects.
}
Оба кажутся слегка неправильными.
Какой правильный подход?
изменить -------------------------------
спасибо за все ответы. Я не могу решить, кто является самым правильным и, следовательно, какой ответ принять.
Как правило, все говорят, поместите бизнес-правила на другой уровень. это имеет смысл, но я не уверен насчет вызовов данных для групп - поскольку группы не являются совокупным корнем, у них не должно быть своего собственного репозитория, так как мне их добавить и сохранить? В моем проекте добавление группы в коллекцию групп пользователя не создает группу автоматически в БД; мне также нужно вызвать session.save для объекта. так я помещаю это в пользовательский репозиторий как userRepo.SaveGroup (g)?
Если у меня есть createGroup () в другом слое, то ему нужно будет либо использовать свое собственное хранилище, либо пользователей. или я толстый?