惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
G
Google Developers Blog
H
Help Net Security
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
D
Docker
Hugging Face - Blog
Hugging Face - Blog
I
InfoQ
博客园 - 司徒正美
Last Week in AI
Last Week in AI
Microsoft Security Blog
Microsoft Security Blog
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence

博客园 - 似水流年-johnhuo

架构师向左,项目经理向右?? 今天迈出第一步,开始了解iphone开发 学习objective-c的一些特殊的地方 信息发布系统 Jquery+MVC架构开发(8)DAL层的补充 信息发布系统 Jquery+MVC架构开发(7) Controller层 . 信息发布系统 Jquery+MVC架构开发(5) DAL层 信息发布系统 Jquery+MVC架构开发(4) Model 层 . 信息发布系统 Jquery+MVC架构开发(3) 解决方案创建 信息发布系统 Jquery+MVC架构开发(2) 在EA下进行数据库设计 信息发布系统 Jquery+MVC架构开发(1) 需求分析和架构构思 c# 设计模式(三)行为型 c# 设计模式(二)结构型 c# 设计模式(一)创建型 .NET平台上的Model-View-Presenter模式实践 关于cmmi的一些理解及资料 iphone 开发学习 C语言指针总结 Android 开发网站,记录一下 使用 TRY/CATCH 语句解决 SQL Server 2005 死锁
信息发布系统 Jquery+MVC架构开发(6)BLL层提供WCF 服务 .
似水流年-johnhuo · 2011-07-24 · via 博客园 - 似水流年-johnhuo

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逆向生成的类图,然后手工修改了一下。