6
目前我正在爲FreeRADIUS創建一個Web界面。這只是一個小應用程序,用於簡化Shell和SQL懶惰同事的變化。我爲數據庫創建了一個實體框架模型,並希望通過使用Facade模式來封裝它。所以我創建了一個名爲賬戶的DTO類。它存儲從三個不同表中彙總的數據。這就是Account.cs的樣子:保持與DTO的幹
public class Account
{
public int? Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string GroupName { get; set; }
public string IpAddress { get; set; }
public string Route { get; set; }
}
這是我組裝並返回一個Account-DTO的方法。
Account Get(string userName)
{
// Get the values from the database.
var check = _entities.Checks.Single(x => x.UserName == userName);
var userGroup = _entities.UserGroups.Single(x => x.UserName == userName);
var ipReply = _entities.Replies.Single(x => x.UserName == userName && x.Attribute == "Framed-IP-Address");
var routeReply = _entities.Replies.Single(x => x.UserName == userName && x.Attribute == "Framed-Route");
// Populate the DTO
var account = new Account
{
UserName = check.UserName,
Password = check.Value,
GroupName = userGroup.GroupName
};
if (ipReply != null) account.IpAddress = ipReply.Value;
if (routeReply != null) account.Route = routeReply.Value;
return account;
}
這是由用戶提交的帳號,DTO
void Update(Account account)
{
// Get the values from the database. Again.
var check = _entities.Checks.Single(x => x.UserName == account.UserName);
var userGroup = _entities.UserGroups.Single(x => x.UserName == account.UserName);
var ipReply = _entities.Replies.Single(x => x.UserName == account.UserName && x.Attribute == "Framed-IP-Address");
var routeReply = _entities.Replies.Single(x => x.UserName == account.UserName && x.Attribute == "Framed-Route");
// Update the possible attributes
check.Value = account.Password;
userGroup.GroupName = account.GroupName;
ipReply.Value = account.IpAddress;
routeReply.Value = account.Route;
_entities.SaveChanges();
}
更新數據庫正如你所看到的方法,我使用完全相同的代碼從數據庫中檢索數據。我怎樣才能幹這個代碼?
'廠:: GetCheck(用戶名字符串)','廠:: GetUserGroup(用戶名字符串)',...? – 2012-04-23 15:57:10
這個DTO的層次有多深?它是否從UI層一直到數據庫層? – 2012-04-23 20:47:55
這是一個MVC Web應用程序(每個視圖都有一個視圖模型)DTO被這樣一個視圖模型填充(在這種情況下,它看起來就像Account.cs)並被傳送到包含上述方法的外觀。 – Sandro 2012-04-23 22:57:13