現在、最初の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();
}
}
現在の Web アプリケーションでは、ユーザーがログインするときに顧客のビジネス プリンシパルを現在のスレッドに隠し、ビジネス オブジェクトが更新されると、現在のビジネス プリンシパルの Identity プロパティで Name プロパティを使用するだけでうまく機能します。
それで私の質問は何ですか?リポジトリの Add メソッドまたは Update メソッド内で同じことを行う必要がありますか、または実際に現在のユーザーへの IUser 参照を渡し、そこから UserId を取得する方がよいでしょうか?
ご意見をお待ちしております。