我正在設計我的數據訪問代碼的過程中,數據將被存儲在RavenDB中,並且我正在嘗試查看我的當前設計是否具有太多抽象與接口的數量I我會去的。太多抽象/接口
我將擁有將持有數據的DTO,然後我將擁有將具有額外功能的實體(或模型,商業或任何您稱之爲它們的對象)。我還將爲每個實體定義需要具備的數據。因此,例如:
interface IUser
{
string Id { get; }
string Username { get; }
string Password { get; }
bool ResetPassword { get; }
}
class UserDTO : IUser
{
public string Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public UserDTO()
{
Id = null;
Username = null;
Password = null;
ResetPassword = false;
}
}
class User : IUser
{
public string Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public User()
{
Id = null;
Username = null;
Password = null;
ResetPassword = false;
}
public User(IUser user)
{
Id = user.Id;
Username = user.Username;
Password = user.Password;
ResetPassword = user.ResetPassword;
}
public ResetPassword()
{
Id = null;
Username = null;
Password = null;
}
}
我想爲每個實體的接口的原因是因爲我要確保兩者EntityDTO
和Entity
具有所需的共享數據。
現在爲了檢索和保存數據,我將使用存儲庫模式。我將有一個名爲IDataRepository
的通用接口,然後每個實體都將擁有自己的存儲庫接口。例如:
interface IDataRepository<T>
{
bool Save(T entity);
bool Delete(T entity);
}
interface IUserRepository : IDataRepository<IUser>
{
IUser Load(string key);
IUser LoadByLogin(string username, string password);
}
class UserRepository : IUserRepository
{
bool Save(T entity)
{
//save code
}
bool Delete(T entity)
{
//delete code
}
IUser Load(string key)
{
//load code
}
IUser LoadByLogin(string username, string password)
{
//load code
}
}
我想爲每個實體存儲庫接口的原因是,我可以的,如果我需要使用不同的實體不同的數據存儲選項。
這是否看起來太抽象了?
爲什麼區分'User'和'UserDTO'? – ChaosPandion 2011-03-30 21:54:11
這看起來像抽象嗎?你什麼意思?你能澄清你想達到什麼嗎? – roosteronacid 2011-03-30 21:57:39
因此,您從存儲庫加載IUser。接下來你會做什麼?將其轉換爲用戶?另外從所提供的信息來看,沒有證據表明DTO是真正必要的。 – driushkin 2011-03-30 22:30:06