1) 你认为XSD信息应该作为模型的一部分吗?
2) 这是否意味着数据访问层返回数据集和其他生成的对象?
3) 它是否穿过所有系统层一直到UI层?
4) 如果XSD是数据访问层的一部分,我应该将结果从模型转换为对象吗?最佳转换方法是什么?
谢谢, Ronny
尽管如此,XSD在运行时并不起作用,因为Visual Studio使用XSD.exe工具从XSD文件生成类型化数据集代码库。
2) 这是否意味着数据访问层返回数据集和其他生成的对象?
如果您的数据层使用了TypedDataset,则会返回DataTable或DataRow[],或者按您所需的方式返回DataRow。
3) 它是否通过所有系统层一直到UI?
您可以在其上生成自定义业务对象,这是一个推荐的做法,而不是在应用程序中随处抛出Dataset对象。
4) 如果XSD是数据访问层的一部分,我应该将结果从模型转换为对象吗?最好的转换方法是什么?
编写一个使用反射的映射机制。我们将DataRow映射到业务对象实例,将DataTables映射到业务对象集合。
您可以开始重新设计,提升您的项目,并采用更易于维护的架构。当然,这需要时间和精力,但最终会有很好的结果。6.) Application.WebClient或Application.WindowsClient
Application.BusinessObjects在整个应用程序中都被使用,并且在需要时穿越所有层[除了Application.DataModel和Application.Infrastructure]。
我所有的查询都只在Application.DataModel中定义。
Application.DataAccess在任何数据访问操作中返回或接受Business对象。 Business对象是通过反射属性创建的。每个Business对象都带有一个映射到目标数据库表的属性,并且Business对象中的属性都带有映射到相应数据库表中目标列的属性。
我的验证框架可以让我使用指定的ValidationAttribute验证每个字段。
我的框架大量使用属性来自动化大部分繁琐的任务,如映射和验证。我也可以将新功能作为框架中的新方面。
在我的应用程序中,样本Business对象看起来像这样。
User.cs
[TableMapping("Users")]
public class User : EntityBase
{
#region Constructor(s)
public AppUser()
{
BookCollection = new BookCollection();
}
#endregion
#region Properties
#region Default Properties - Direct Field Mapping using DataFieldMappingAttribute
private System.Int32 _UserId;
private System.String _FirstName;
private System.String _LastName;
private System.String _UserName;
private System.Boolean _IsActive;
[DataFieldMapping("UserID")]
[DataObjectFieldAttribute(true, true, false)]
[NotNullOrEmpty(Message = "UserID From Users Table Is Required.")]
public override int Id
{
get
{
return _UserId;
}
set
{
_UserId = value;
}
}
[DataFieldMapping("UserName")]
[Searchable]
[NotNullOrEmpty(Message = "Username Is Required.")]
public string UserName
{
get
{
return _UserName;
}
set
{
_UserName = value;
}
}
[DataFieldMapping("FirstName")]
[Searchable]
public string FirstName
{
get
{
return _FirstName;
}
set
{
_FirstName = value;
}
}
[DataFieldMapping("LastName")]
[Searchable]
public string LastName
{
get
{
return _LastName;
}
set
{
_LastName = value;
}
}
[DataFieldMapping("IsActive")]
public bool IsActive
{
get
{
return _IsActive;
}
set
{
_IsActive = value;
}
}
#region One-To-Many Mappings
public BookCollection Books { get; set; }
#endregion
#region Derived Properties
public string FullName { get { return this.FirstName + " " + this.LastName; } }
#endregion
#endregion
public override bool Validate()
{
bool baseValid = base.Validate();
bool localValid = Books.Validate();
return baseValid && localValid;
}
}
BookCollection.cs
/// <summary>
/// The BookCollection class is designed to work with lists of instances of Book.
/// </summary>
public class BookCollection : EntityCollectionBase<Book>
{
/// <summary>
/// Initializes a new instance of the BookCollection class.
/// </summary>
public BookCollection()
{
}
/// <summary>
/// Initializes a new instance of the BookCollection class.
/// </summary>
public BookCollection (IList<Book> initialList)
: base(initialList)
{
}
}