thi*_*eek 15
这就是我项目中的内容.不仅仅是传统的3层架构.
1.)Application.Infrastructure
2.)Application.DataModel
3.)Application.DataAccess
4.)Application.DomainObjects
5.)Application.BusinessLayer
6.)Application.WebClient或Application.WindowsClient
Application.BusinessObjects在整个应用程序中使用,并且每当需要时它们都会遍历所有层[Application.DataModel和Application.Infrastructure除外]
我的所有查询都只定义了Application.DataModel.
Application.DataAccess返回或接受Business对象作为任何数据访问操作的一部分.业务对象是在反射属性的帮助下创建的.每个业务对象都标记有一个属性映射到数据库中的目标表,业务对象中的属性使用映射到相应数据库表中的目标列的属性进行标记.
我的验证框架允许我在指定的ValidationAttribute的帮助下验证每个字段.
我的framrwork大量使用Attributes来自动化大多数繁琐的任务,如映射和验证.我还可以将新功能作为框架中的新方面.
在我的应用程序中,示例业务对象将如下所示.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
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)
{
}
}
Run Code Online (Sandbox Code Playgroud)
Cra*_*rze 10
"层"是指软件堆栈中的"层"?"层"一词更适用于描述系统的物理组件.如果您使用的是ASP.NET,那么您可能已经拥有了"3层"系统 -
但是您可能将所有代码放入单个软件"层" - 特别是aspx页面的代码隐藏文件.您想要从单层移动到3层方法.经典的"3层"软件架构包括以下内容 -
表达层
业务逻辑层(BLL)
数据访问层(DAL)
对于典型的ASP.NET应用程序,您可以按如下方式应用它.首先,创建一个包含数据库访问对象的LINQ2SQL文件(.dbml).这是您的数据访问层(DAL).
接下来,您可以创建一个DLL来包含业务逻辑层(BLL).该层将通过DAL访问数据库,根据需要对其进行操作,然后通过简单的界面将其公开.例如,如果您的应用程序显示客户端列表,则您的BLL可能具有名为GetClientList()的公共函数,该函数返回客户端列表.
最后,您将在文件后面设置代码以实例化BLL并将其连接到接口组件.这是您的表示层.例如,它可能需要从GetClientList()函数返回的数据并将其绑定到Web表单上的数据网格.我们的想法是让表示层尽可能地薄.
这似乎有点啰嗦,但是一旦你做了几次就很直接.您会发现将这样的应用程序分离出来会使维护更加容易,因为关注点的分离会导致代码更清晰.您还会发现升级甚至更换表示层要容易得多,因为它包含非常少的智能.最后,您将获得一些可以在新应用程序中轻松使用的非常有用的BLL库,从而大大提高了工作效率.
表示层:放置与用户界面相关的所有内容。(用户看到的)
业务层:与应用逻辑相关的一切(来自表现层的信息如何处理)
数据层:提供底层数据源的抽象(来自/去往业务层的信息在哪里以及如何存储)
每一层都应该尽可能少地了解另一层,它应该是一种自上而下的方法:
简单的例子:
网站:
三层架构可以根据上下文具有不同的含义。通常这意味着应用程序中的职责在不同的层之间划分。通常,3 层是指:
详细信息因应用程序而异。
像往常一样,维基百科有一个很好的概述:http : //en.wikipedia.org/wiki/Multitier_architecture
一个简单的例子是一个典型的商业应用程序:
归档时间: |
|
查看次数: |
34491 次 |
最近记录: |