首页 新闻 会员 周边 捐助

大家觉得BL层要不要写成单例?

1
悬赏园豆:5 [已解决问题] 解决于 2014-11-28 09:34

在三层架构中,BL层一般就是传入参数,返回查询结果之类的;

我觉得没必要在每个页面 new 一个BL来使用,于是就想写成单例。。像下图这样:

 

比如在登录页面创建一个实例之后,那么同一时间无论有多少个用户访问登录页面(登录页面有多个实例),BL都只有一个。。而不会每访问一次登录页面就new 一个BL,大家觉得这样写好不好?

 

这样写会不会带来什么负面影响 ?

 

谢谢!

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2014-11-07 18:57
< >
分享
最佳答案
0

如果你的bll层很大,那你的内存消耗应该会比较高哦,同时,私有对象应该如何隔离?~基本上bll层没有写成单例的...

收获园豆:5
幻天芒 | 高人七级 |园豆:37205 | 2014-11-08 11:15

不会吧,我这边的BLL就是全部是单例的.私有对象为什么会在BLL里面?

Miky.Chou | 园豆:76 (初学一级) | 2014-11-09 12:10

您说的私有对象是指什么呢?

hexllo | 园豆:318 (菜鸟二级) | 2014-11-10 10:34

@hexllo: 在BLL类实例中的全局对象。

幻天芒 | 园豆:37205 (高人七级) | 2014-11-10 10:46

@幻天芒: 这个到没有,没在BLL中写全局的东西。

hexllo | 园豆:318 (菜鸟二级) | 2014-11-10 10:48

@hexllo: 这个全局,是指单实例中全局,不是整个系统全局。就比如定义在class里面,方法外面的变量。

幻天芒 | 园豆:37205 (高人七级) | 2014-11-10 10:51

@hexllo: 不好意思,耽搁的有点久才看到.

私有对象这里指的是Bll类的实例对象.如果用单例那么所有的成员就会在每次调用BLL时共享,所以Bll里面的对象就不会存在一个依赖与某一单个流程对象.所以我建议是如果要使用单例的BLL就应该在上层将一个逻辑处理的结果保存或者在BLL中简历字典用于一一对应

Miky.Chou | 园豆:76 (初学一级) | 2014-11-18 21:43

@Miky.Chou: 没事的,谢谢你的耐心回答

hexllo | 园豆:318 (菜鸟二级) | 2014-11-27 17:08

@幻天芒: 在BL里没有写这样的全局,基本都是传参数进来,查询数据这种.为什么写成单例之后,内存占用还会变大呢?我原本想的是写成单例之后,无论有多少个用户来访问多少个页面,这些BL层都各自只有一个实例...而不会因为访问量大的时候,同时new了很多个实例,我这样的想法有没有什么问题?

hexllo | 园豆:318 (菜鸟二级) | 2014-11-27 17:12

@hexllo: 没有new实例,也会占用内存来保存数据哇。按照你的描述,感觉你这bll层有点像公共方法层了...

幻天芒 | 园豆:37205 (高人七级) | 2014-11-28 08:58

@幻天芒: 是的,基本是这样,我在BaseDAO里实现了通用的CRUD方法,包括join查询之类的都实现了,然后将所有的BL都继承自BaseDAO,这些BL里写的方法不多,除非多个表join,group之类的才写在BL里,一般直接用commonBL就能满足常用的要求了...我也觉得BL像是公共方法层...我的逻辑验证之类的,都写在页面的后台cs文件里,比如验证输入参数是否正确之类..验证通过后,就调用BL...

 

一直觉得3层中的BL基本没多大用,都是通过它来调用DA,我的BL和DA不是在一个项目里,但是它继承自DA项目的BaseDAO,像这样写将来会不会带来哪些问题?

hexllo | 园豆:318 (菜鸟二级) | 2014-11-28 09:06

@hexllo: 我反而是觉得DA层没啥用,逻辑层处理业务+数据。你这样从代码上倒是没啥问题,可以就是职责比较不清晰吧。按照你这样的用法,可以考虑使用下IOC。

幻天芒 | 园豆:37205 (高人七级) | 2014-11-28 09:09
其他回答(5)
0

首先觉的这种设计就有问题,bll层如果仅仅起个转发的作用?那要它有何意义呢?所以还得从根本上去考虑问题,

用不用单例主要看对象没有状态,而对单例引起的并发问题,主要用锁机制解决,以保证其全局唯一性.

zyv | 园豆:240 (菜鸟二级) | 2014-11-08 16:23
0

你做web项目应该单例httpcontext吧,建议看下C#的设计模式有讲过web项目单例的

aries_gold | 园豆:141 (初学一级) | 2014-11-10 10:30
0

你可以参考参考

http://q.cnblogs.com/q/53286/

0.617 | 园豆:410 (菜鸟二级) | 2014-11-10 17:30
0

现在都是 Ioc了

你需要看看外面的世界

南昌炒粉 | 园豆:760 (小虾三级) | 2014-11-11 02:04
0

可能楼主static方法写多了

Giant150 | 园豆:1172 (小虾三级) | 2014-11-14 18:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册