这是我项目中的内容。
1.) Application.Infrastructure
所有业务对象、业务对象集合、数据访问类及其自定义属性和扩展方法的基类,以及通用验证框架。这决定了我最终 .net 应用程序的整体行为组织。
2.) Application.DataModel
用于数据库的类型化数据集。
扩展了 TableAdapters 以纳入事务和其他我可能需要的功能。
3.) Application.DataAccess
数据访问类。
实际上查询数据库操作的地方,使用底层的类型化数据集。
4.) Application.DomainObjects
业务对象和业务对象集合。
枚举。
5.) Application.BusinessLayer
提供从表现层可访问的管理器类。
HttpHandlers。
我的自定义页面基类。
更多东西在这里...
6.) Application.WebClient 或 Application.WindowsClient
我的表现层。
引用 Application.BusinessLayer 和 Application.BusinessObjects。
Application.BusinessObjects 在整个应用程序中都被使用,只要需要 [除了 Application.DataModel 和 Application.Infrastructure],它们就会遍历所有层。
我的所有查询仅在 Application.DataModel 中定义。
Application.DataAccess 作为任何数据访问操作的一部分返回或接受业务对象。使用反射属性创建业务对象。每个业务对象都标记有映射到目标数据库表的属性,并且业务对象内的属性都标记有映射到相应数据库表列的属性。
我的验证框架让我可以使用指定的 ValidationAttribute 验证每个字段。
我的框架大量使用属性来自动化大部分繁琐的任务,如映射和验证。我还可以将新功能作为框架中的新方面添加。
在我的应用程序中,样例业务对象看起来像这样。
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
public class BookCollection : EntityCollectionBase<Book>
{
public BookCollection()
{
}
public BookCollection (IList<Book> initialList)
: base(initialList)
{
}
}