В настоящее время я работаю над моим первым приложением asp.net mvc. Я пытаюсь выпить коул-хелп из всех примеров проектов, которые я вижу, и пытаюсь использовать шаблон проектирования .
У меня есть интерфейс IUserRepository, который выглядит следующим образом:
public interface IUserRepository
{
IUser Add(IUser user);
IQueryable<IUser> Fetch();
IUser Update(IUser obj);
void Delete(IUser obj);
}
Мой интерфейс IUser имеет множество свойств и свойств для CreatedBy, CreatedDate, ModifiedBy и ModifiedDate.
Мой UserRepository выглядит следующим образом:
public class UserRepository : IUserRepository
{
private GimliDataContext db = null;
public UserRepository()
{
db = new GimliDataContext();
}
public UserRepository(string connection)
{
db = new GimliDataContext(connection);
}
public IUser Add(IUser obj)
{
db.Users.InsertOnSubmit((User)obj);
db.SubmitChanges();
return obj;
}
public IQueryable<IUser> Fetch()
{
return db.Users.Select(b => b as IUser);
}
public IUser Update(IUser obj)
{
var user = db.Users.Where(u => u.UserId == obj.UserId).Single();
user.Name = obj.Name;
user.Password = obj.Password;
user.Email = obj.Email;
user.IsLocked = obj.IsLocked;
user.IsDisabled = obj.IsDisabled;
db.SubmitChanges();
return user;
}
public void Delete(IUser obj)
{
var user = db.Users.Where(u => u.UserId == obj.UserId).Single();
db.Users.DeleteOnSubmit(user);
db.SubmitChanges();
}
}
В моих текущих веб-приложениях, когда мои пользователи входят в систему, я сохраняю бизнес-принципал клиента в текущем потоке, а когда мои бизнес-объекты обновляются, я просто использую свойство Name в свойстве Identity текущего бизнес-принципала, и оно прекрасно работает. *
Так в чем же мой вопрос? Должен ли я просто сделать то же самое в методах Add или Update моего репозитория ИЛИ было бы лучше на самом деле передать ссылку IUser текущему пользователю и просто получить оттуда UserId?
Цените любой вклад!