小弟最近因项目需要自己搭建框架,但是不知道怎么搭建,所以做了一个搭建的demo,希望大家能之处其中不妥的地方,项目是传统的bussess项目,基本的信息维护。
项目的整体机构图
1 首先我们来说说数据层
namespace Neower.UnicomVideo.DataAccess
{
public class UserInfoDA : DataAccessBase
{
public virtual UserInfo[] GetUserInfos()
{
string sql = "SELECT * FROM dbo.UserInfo";
DbCommand command = Db.GetSqlStringCommand(sql);
DataSet ds = Db.ExecuteDataSet(command);
List<UserInfo> userInfos = new List<UserInfo>();
foreach (DataRow row in ds.Tables[0].Rows)
{
UserInfo userInfo = new UserInfo()
{
UserID = row["UserID"].ToString(),
UserName = row["UserName"].ToString(),
UserAge = string.IsNullOrEmpty(row["UserAge"].ToString()) ? new Nullable<int>() : int.Parse(row["UserAge"].ToString())
};
userInfos.Add(userInfo);
}
return userInfos.ToArray();
}
}
}
基类代码
在这层有一个帮助类 主要用于创建对象,因为后面的每一层都要访问数据层,所以把它放到数据层了
2紧接下来的就是组建层 也是我们常说的业务管理层
namespace Neower.UnicomVideo.BusinessComponent
{
public class UserInfoBC
{
UserInfoDA da;
public UserInfoBC(UserInfoDA userinfoDA)
{
da = userinfoDA;
}
public virtual UserInfo[] GetUserInfos()
{
return da.GetUserInfos();
}
}
}
3 接口层 wcf的接口我们放到单独的一个项目中
namespace Neower.UnicomVideo.Common
{
[ServiceContract]
public interface IUserInfo
{
[OperationContract]
[FaultContract(typeof(FaultException))]
UserInfo[] GetUserInfos();
}
}
4 外观层 即使wcf接口的实现层
namespace Neower.UnicomVideo.BusinessFacade
{
public class UserInfoBF : IUserInfo
{
UserInfoBC bc;
public UserInfoBF()
{
bc = Helper.GetInstance<UserInfoBC>();
}
public UserInfo[] GetUserInfos()
{
return bc.GetUserInfos();
}
}
}
5 服务托起层 用iis把服务托起
<%@ ServiceHost language="C#" Debug="true" Service="Neower.UnicomVideo.BusinessFacade.UserInfoBF"%>
配置文件
主要是实现对象的创建 做到真正的IOC
6 代理层
public class UserInfoProxy : ProxyBase<IUserInfo>, IUserInfo
{
public UserInfo[] GetUserInfos()
{
IUserInfo proxy = GetInstance();
try
{
return proxy.GetUserInfos();
}
catch (CommunicationException)
{
(proxy as ICommunicationObject).Abort();
throw;
}
catch (TimeoutException)
{
(proxy as ICommunicationObject).Abort();
throw;
}
finally
{
(proxy as ICommunicationObject).Close();
}
}
private IUserInfo GetInstance()
{
return this.GetObject("UserInfo");
}
}
}
基类
public class ProxyBase<T>
{
public T GetObject(string endpoint)
{
return ProxyHelper.GetObject<T>(endpoint);
}
}
自己增加的工具类:
7 最后就是应用层了
protected void Page_Load(object sender, EventArgs e)
{
UserInfoProxy proxy=new UserInfoProxy();
UserInfo[] list = proxy.GetUserInfos();
gv.DataSource = list;
gv.DataBind();
}
小弟把这个设计放到这里,希望高手指点一二。