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

推荐订阅源

V
V2EX
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
罗磊的独立博客
小众软件
小众软件
I
InfoQ
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog
MyScale Blog
MyScale Blog
博客园 - 聂微东
Microsoft Security Blog
Microsoft Security Blog
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
P
Proofpoint News Feed
博客园 - 司徒正美
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
N
Netflix TechBlog - Medium

博客园 - 风焰庄主

React中,useContext+useReducer对比Redux React中,useReducer和useState python, C++, C# 计算速度简单对比 .net程序在64位系统上报 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 问题解决 DropBox把目录设置在U盘里面的方法 工作过公司的体会--结构完整的企业其实还是挺吸引人的 努力与付出 微软用于写Javascript的一个插件,Script# 项目管理的一点想法 介绍一况挺好用的Javascript编辑器(带项目) 简单的C#进行图片操作 PHP访问C#建立的Webservice 搜索引擎一:介绍 纪念一下Jerry 在中信66楼微软Offic参加讲座 关于地理信息信息点数据采集一些方法 介绍一下JS调试和浏览器调试工具 服务器不支持WebResource.axd的特殊处理 嫦娥一号发射
对三层架构的简单改进
风焰庄主 · 2014-01-23 · via 博客园 - 风焰庄主

  三层架构是很常见的架构方式,被很多公司所使用,特别是asp.net。优点是使用简单,缺点是BLL层与DAL层经常会很多重复。

  今天不是要讨论它的优缺点,而是讨论使用它时存在的问题。

  我们在使用过程中,BLL层一般不会用来存储持久化的变量,而且BLL经常被这样使用的:

SomeBLL bll=new SomeBLL( );

bll.doSomething( );

  图1:DAL,BLL和Page的关系

  这就有个问题,如果有十个页面需要访问这个类,那么就需要创建十次这个变量。如果同时有一千人在访问,那可能是一万个BLL对象。还有,每个BLL对象,还要new一个DAL对象……

  当然,.net也不见得会这么傻,毕竟还有共用,垃圾回收机制等等。可是,我们真的有必要这么做吗?

  由于BLL对象一般不是用来储存持久化变量,里面只有一些逻辑方法,那么我们是否可以只创建一次BLL对象,而且是所有浏览的用户都使用同一个对象呢?

  当然是可以的,什么单例模式,什么工厂模式……今天,我们学一下  DataRow,也来使用一个自己的方式。

 

  图2:改进的设计

  我们使用BLLCreator来创建唯一的一个静态的SomeBLL。

public class BLLCreator

{

    private static SomeBLL _someBll;

    public static SomeBLL CreateSomeBLL( )

    {

        if(_someBll == null)

        {

            _someBll = new SomeBLL( );

        }

 

        return _someBll;

    }

}

 

public class SomeBLL()

{

    private SomeDAL someDal = new SomeDAL( );

 

    protected internal SomeBLL()

    {

        // todo something init here

    }

 

    public void doSomething()

    {

        

    }

}

 

public class Page1:WebPage

{

    SomeBLL someBll = BLLCreator.CreateSomeBLL( );

    someBll.doSomething( );

}

    搞定。以后无论多少人访问,永远是一个对象。当然,如果想用泛型什么的,自由发挥了。