添加的System.Web参考业务逻辑层的n层结构

我使用TableProfileProvider使用ASP.NET配置文件系统,n层结构。
UI层是一个Web应用程序,所以我必须揭露ProfileCommon类是能够使用配置文件。
这里是我的架构的简化架构:
用户界面:ASP.NET Web应用程序。
BusinessEntities:纯 POCO类。 持久性Igronace。
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;

我希望能够从我的业务逻辑层访问配置文件通用,所以我感动的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 / BusinessEntities库违反了n层结构的学科? 如果是的话,你会为了实现这个什么建议?

--------------解决方案-------------

您可以通过实现一个接口,而不是打破ProfileBase的依赖。 比如说

public interface IProfile
{
string FirstName { get; set; }
string LastName { get; set; }

IProfile GetProfile(string username);
}

public class ProfileCommon : ProfileBase, IProfile
{
public virtual IProfile GetProfile(string username)
{
return (ProfileCommon)ProfileBase.Create(username);
}

public virtual string FirstName
{
get
{
return (string)base.GetPropertyValue("FirstName");
}
set
{
base.SetPropertyValue("FirstName", value);
}
}
}

public class ProfileInfo
{
public ProfileInfo(IProfile profile)
{
this.Profile = profile;
}

public IProfile Profile { get; set; }

public string GetFullName()
{
return this.Profile.FirstName + " " + this.Profile.LastName;
}
}

现在,你不必对System.Web.dll中任何依赖于你的业务逻辑,但仍必须实现自由IProfile使用在你的web应用接口ProfileBase

你不应该从业务层访问的System.Web。 这就联系您使用的Web应用程序的工作。 如果你想在一个不同类型的应用程序重用的业务层?

你应该问问自己,你试图通过该完成什么。 然后,抽象的这一要求到的东西一般合理的业务层的访问。 这假定业务层应该知道用户在所有。

分类:。净 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.303 (s). 10 q(s)