我正在使用 TableProfileProvider 在 n 层架构中使用 ASP.NET 配置文件系统。
UI 层是一个 Web 应用程序,因此我必须公开 profilecommon 类才能使用配置文件。
这是我的架构的简化架构:
UI: ASP.NET Web 应用程序。
BusinessEntities:纯 POCO 类。坚持不懈。
BLL:业务逻辑层。
DAL:数据访问层。
Profilecommon 的定义是:
public class ProfileCommon : ProfileBase
{
public virtual ProfileCommon GetProfile(string username)
{
return (ProfileCommon)ProfileBase.Create(username);
}
public virtual string FirstName
{
get
{
return (string)base.GetPropertyValue("FirstName");
}
set
{
base.SetPropertyValue("FirstName", value);
}
}
}
在一个简单的设计架构中,所有内容都在 Web 应用程序项目中定义,我将按如下方式访问 profilecommon:
ProfileCommon strongleyTypedProfile = (ProfileCommon)this.Context.Profile;
我希望能够从我的业务逻辑层访问 Profile Common,因此我将 ProfileCommon 定义移至我的 BusinessEntities 库(必须在 BusinessEntities 库中添加对 System.Web 程序集的引用)并定义了新的 ProfileBLL 类:
public class ProfileInfo
{
public ProfileInfo(ProfileCommon profile)
{
this.Profile = profile;
}
public ProfileCommon Profile { get; set; }
public string GetFullName()
{
return this.Profile.FirstName + " " + this.Profile.LastName;
}
}
现在我可以像这样从 UI 访问常见的配置文件:
var profileInfo = new BLL.ProfileInfo((ProfileCommon)this.Context.Profile);
txtFullName.text = profileInfo.GetFullName();
现在,在业务层/业务实体库中引用 System.Web 是否违反了 n 层架构规则?如果是这样,您会提出什么建议来实现这一目标?