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

推荐订阅源

Google DeepMind News
Google DeepMind News
S
Security Affairs
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog
雷峰网
雷峰网
Recent Announcements
Recent Announcements
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
博客园_首页
The Cloudflare Blog
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
S
SegmentFault 最新的问题
P
Proofpoint News Feed
Y
Y Combinator Blog
Jina AI
Jina AI
博客园 - 聂微东
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
F
Full Disclosure
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
T
Tailwind CSS Blog
J
Java Code Geeks
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Blog of Author Tim Ferriss
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 三生石上(FineUI控件)
W
WeLiveSecurity
PCI Perspectives
PCI Perspectives
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
宝玉的分享
宝玉的分享
IT之家
IT之家
Hacker News: Ask HN
Hacker News: Ask HN
The Register - Security
The Register - Security
T
The Exploit Database - CXSecurity.com
T
Threat Research - Cisco Blogs

博客园 - 似水流年-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逆向生成的类图,然后手工修改了一下。