在三层架构中,BL层一般就是传入参数,返回查询结果之类的;
我觉得没必要在每个页面 new 一个BL来使用,于是就想写成单例。。像下图这样:
比如在登录页面创建一个实例之后,那么同一时间无论有多少个用户访问登录页面(登录页面有多个实例),BL都只有一个。。而不会每访问一次登录页面就new 一个BL,大家觉得这样写好不好?
这样写会不会带来什么负面影响 ?
谢谢!
如果你的bll层很大,那你的内存消耗应该会比较高哦,同时,私有对象应该如何隔离?~基本上bll层没有写成单例的...
不会吧,我这边的BLL就是全部是单例的.私有对象为什么会在BLL里面?
您说的私有对象是指什么呢?
@hexllo: 在BLL类实例中的全局对象。
@幻天芒: 这个到没有,没在BLL中写全局的东西。
@hexllo: 这个全局,是指单实例中全局,不是整个系统全局。就比如定义在class里面,方法外面的变量。
@hexllo: 不好意思,耽搁的有点久才看到.
私有对象这里指的是Bll类的实例对象.如果用单例那么所有的成员就会在每次调用BLL时共享,所以Bll里面的对象就不会存在一个依赖与某一单个流程对象.所以我建议是如果要使用单例的BLL就应该在上层将一个逻辑处理的结果保存或者在BLL中简历字典用于一一对应
@Miky.Chou: 没事的,谢谢你的耐心回答
@幻天芒: 在BL里没有写这样的全局,基本都是传参数进来,查询数据这种.为什么写成单例之后,内存占用还会变大呢?我原本想的是写成单例之后,无论有多少个用户来访问多少个页面,这些BL层都各自只有一个实例...而不会因为访问量大的时候,同时new了很多个实例,我这样的想法有没有什么问题?
@hexllo: 没有new实例,也会占用内存来保存数据哇。按照你的描述,感觉你这bll层有点像公共方法层了...
@幻天芒: 是的,基本是这样,我在BaseDAO里实现了通用的CRUD方法,包括join查询之类的都实现了,然后将所有的BL都继承自BaseDAO,这些BL里写的方法不多,除非多个表join,group之类的才写在BL里,一般直接用commonBL就能满足常用的要求了...我也觉得BL像是公共方法层...我的逻辑验证之类的,都写在页面的后台cs文件里,比如验证输入参数是否正确之类..验证通过后,就调用BL...
一直觉得3层中的BL基本没多大用,都是通过它来调用DA,我的BL和DA不是在一个项目里,但是它继承自DA项目的BaseDAO,像这样写将来会不会带来哪些问题?
@hexllo: 我反而是觉得DA层没啥用,逻辑层处理业务+数据。你这样从代码上倒是没啥问题,可以就是职责比较不清晰吧。按照你这样的用法,可以考虑使用下IOC。
首先觉的这种设计就有问题,bll层如果仅仅起个转发的作用?那要它有何意义呢?所以还得从根本上去考虑问题,
用不用单例主要看对象没有状态,而对单例引起的并发问题,主要用锁机制解决,以保证其全局唯一性.
你做web项目应该单例httpcontext吧,建议看下C#的设计模式有讲过web项目单例的
现在都是 Ioc了
你需要看看外面的世界
可能楼主static方法写多了