存儲在具有數據約束(例如最大字符串屬性長度)的關係數據庫中的數據。客戶端使用數據訪問庫(DAL)來管理ORM的方式(庫+數據域類)DAL。建模數據約束最佳實踐
會在哪裏你親自實施限制的數據? 例如:
數據域類:
class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = StringHelper.Truncate(value, 50) }
}
...
}
或可能是倉庫:
PersonRepository {
public void CreatePerson(Person p) {
p.Name = StringHelper.Truncate(p.Name, 50);
...
DataContext.Insert(..);
}
}
或者,你應使用分配給數據領域類屬性的屬性將在資源庫中處理方法通過反射自動化字符串字段截斷。
class Person {
[StringConstraint(MaxLength = 50)]
public string Name { get; set; }
}
PersonRepository::CreatePerson(p) {
EntityHelper.ApplyConstraints(p);
...
}
或者可能是別的東西?
預先感謝您!
我有UI來操縱數據,我想拒絕用戶輸入太長的字符串。如果程序會告訴他們'Sql error occurred',那麼數據約束應該以某種方式轉換爲UI,這將是不正常的。 – 2010-08-22 05:06:47
你不會告訴使用SQL錯誤的用戶; SQL錯誤將被應用程序捕獲並且應用程序會呈現該字符串太長的味精。是「通過向用戶顯示有用的消息來處理該錯誤取決於應用程序。」那很難理解?! – 2010-08-22 05:11:37
我明白了,但只要輸入冗長的字符串,而不是花費時間與任何類型的錯誤消息(「嘿!你的名字太長!請刪除10個字符」)的ui-dbms往返,就會更加用戶友好。對於我的意見,應該從dbms級別冒出來。 – 2010-08-22 05:16:46