信息发布系统 Jquery+MVC架构开发(6)BLL层提供WCF 服务 .
BLL层我们用wcf 来提供服务,这一层我们只对外只发布一个服务,为了使我们的代码可维护更好,我们引入抽象工厂模式。
这样的话我们首先也创建三个接口:
1) IInfo
InfoResult Add(Info info);
InfoResult Update(Info info);
InfoResult Delete(int infoId);
InfoList GetInfoList(SearchInfo searchInfo);
InfoList GetInfoById(int infoId);
2) IInfoType
跟上面相同,不再赘述。
3) IUserInfo
跟上面相同,不再赘述。
然后实现这三个接口,我们也用infoBll为例如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InfoPub.DAL;
using InfoPub.Modal;
namespace InfoPub.BLLService
{
public class InfoBLL:IInfo
{
private InfoDal infoDal=new InfoDal();
public InfoResult Add(Info model)
{
return infoDal.Add(model);
}
public InfoResult Update(Info model)
{
return infoDal.Update(model);
}
public InfoResult Delete(int infoId)
{
return infoDal.Delete(infoId);
}
public InfoList GetInfoList(SearchInfo searchInfo)
{
return infoDal.GetInfoList(searchInfo);
}
public InfoList GetInfoById(int infoId)
{
return infoDal.GetInfoById(infoId);
}
}
}
然后我们创建一个工厂接口:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace InfoPub.BLLService.Interface
{
public interface INBllFactory
{
IInfo CreateInfo();
IInfoType CreateInfoType();
IUserInfo CreateUserInfo();
}
}
然后实现工厂类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InfoPub.BLLService.Interface;
namespace InfoPub.BLLService
{
public class BllFactory : INBllFactory
{
public IInfo CreateInfo()
{
return new InfoBLL();
}
public IInfoType CreateInfoType()
{
return new InfoTypeBLL();
}
public IUserInfo CreateUserInfo()
{
return new UserInfoBLL();
}
}
}
为了访问工厂类我们定义一个工厂提供类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace InfoPub.BLLService
{
public class Common
{
public static BllFactory bllFactory=new BllFactory();
}
}
这样我们就可以访问我们的工厂类了,为了对wcf 提供工厂类的方法,我们加入一个CommonData类,它就类似我们的门面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace InfoPub.BLLService
{
public class CommonData
{
#region 全局变量
public static IInfo info = Common.bllFactory.CreateInfo();
public static IInfoType infoType = Common.bllFactory.CreateInfoType();
public static IUserInfo userInfo = Common.bllFactory.CreateUserInfo();
#endregion
}
}
然后定义我们的wcf 契约:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using InfoPub.Modal;
namespace InfoPub.BLLService
{
[ServiceContract]
public interface IInfoPubService
{
[OperationContract]
InfoResult AddInfo(Info info);
[OperationContract]
InfoResult UpdateInfo(Info info);
[OperationContract]
InfoResult DeleteInfo(int infoId);
[OperationContract]
InfoList GetInfoList(SearchInfo searchInfo);
[OperationContract]
InfoList GetInfoById(int infoId);
[OperationContract]
InfoResult AddInfoType(InfoType infoType);
[OperationContract]
InfoResult UpdateInfoType(InfoType infoType);
[OperationContract]
InfoResult DeleteInfoType(int infoTypeId);
[OperationContract]
InfoTypeList GetInfoTypeList(SearchInfoType searchInfoType);
[OperationContract]
InfoTypeList GetInfoTypeById(int infoId);
[OperationContract]
InfoResult AddUserInfo(UserInfo userInfo);
[OperationContract]
InfoResult UpdateUserInfo(UserInfo userInfo);
[OperationContract]
InfoResult DeleteUserInfo(int userinfoId);
[OperationContract]
InfoList GetUserInfoList(SearchUserInfo searchUserInfo);
[OperationContract]
InfoList GetUserInfoById(int userInfoId);
}
}
它的实现如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using InfoPub.Modal;
namespace InfoPub.BLLService
{
public class InfoPubService : IInfoPubService
{
public InfoResult AddInfo(Info info)
{
return CommonData.info.Add(info);
}
public InfoResult UpdateInfo(Info info)
{
return CommonData.info.Update(info);
}
public InfoResult DeleteInfo(int infoId)
{
return CommonData.info.Delete(infoId);
}
public InfoList GetInfoList(SearchInfo searchInfo)
{
return CommonData.info.GetInfoList(searchInfo);
}
public InfoList GetInfoById(int infoId)
{
return CommonData.info.GetInfoById(infoId);
}
public InfoResult AddInfoType(InfoType infoType)
{
return CommonData.infoType.Add(infoType);
}
public InfoResult UpdateInfoType(InfoType infoType)
{
return CommonData.infoType.Update(infoType);
}
public InfoResult DeleteInfoType(int infoTypeId)
{
return CommonData.infoType.Delete(infoTypeId);
}
public InfoTypeList GetInfoTypeList(SearchInfoType searchInfoType)
{
return CommonData.infoType.GetInfoTypeList(searchInfoType);
}
public InfoTypeList GetInfoTypeById(int infoId)
{
return CommonData.infoType.GetInfoTypeById(infoId);
}
public InfoResult AddUserInfo(UserInfo userInfo)
{
return CommonData.userInfo.Add(userInfo);
}
public InfoResult UpdateUserInfo(UserInfo userInfo)
{
return CommonData.userInfo.Update(userInfo);
}
public InfoResult DeleteUserInfo(int userinfoId)
{
return CommonData.userInfo.Delete(userinfoId);
}
public InfoList GetUserInfoList(SearchUserInfo searchUserInfo)
{
return CommonData.userInfo.GetUserInfoList(searchUserInfo);
}
public InfoList GetUserInfoById(int userInfoId)
{
return CommonData.userInfo.GetUserInfoById(userInfoId);
}
}
}
下面是我们的类图关系:
需要说明的是我这个是用ea逆向生成的类图,然后手工修改了一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库