UI层与BLL层何时分离

  最近从师父那里接过来一个搞了一半的项目。首先比较感叹师父的编程思想,居然能够把缓存信息跟数据直接联系起来。在以前我是一直认为,缓存信息必须独立存储在一个独立的空间,等到存储到足够的信息以后才把数据存入数据项中,然后对应存储到数据库中。通过这个项目,我从师父的代码中学到了很多。但是,如果光记录些学习到的东西就没多大意义了。下面开始讲自己实践的收获。

  很早我就知道三层结构的好处,表现层(UI)与业务逻辑层(BLL)的不相关性,可以使得页面的修改变得异常轻松。(我们的数据访问层(DAL)早就脱离出来了,这里就不描述了。)这种近乎完美的思路也一直影响我在阅读各位名家著作时的联想能力。并在每次进行编码前,也都会先构架出一套能够把UI层和BLL层严格分开的结构。相关的著作包括:《重构-改善现有代码的设计》、《C#设计模式》、《Effective C#》等。

  通过在两个反馈系统、三个模块中对分层分离的应用,本人对UI层和BLL层也有了一点了解。对于初学者也有一点建议,不要刚接到一个项目就立刻进行层次分离。首先,在一个项目初期,存在着客户与编程人员对事物理解上的偏差问题,为了协调这种差异性,需要进行大量的调研和沟通。而在编程世界里面,UI层与BLL层的分离意味着,更改同一样东西需要在两个甚至更多的类中来回查代码。这在阅读代码上会造成不小的困难。其次,在初期,项目的功能需要经常性更改。这种更改就需要程序员对功能进行设计和功能完整性验证。有时,部分功能要完成起来异常艰难,这时候如果分层了,就会使得程序员异常疲惫。在这种状态下进行编程,可能会让部分程序员失去信心和斗志。(所以很多前辈,都会说程序员是熬出来的。)最糟糕的情况是,由于分离得不好,一切工作都得重新再来。最后,还有一个比较特别的问题,主要存在于超小型团队中,就是在构建的BLL层不能重复使用的情况。因为目前超小型团队只存在于小型公司,而这些小型公司由于人力物力不足,而为了开拓市场,客户与客户之间需求的差异性非常大,就导致了大部分BLL层不能进行重复利用。所以每次都需要进行逻辑层设计。这样复杂而又艰巨的任务本来由专职的系统设计师来进行设计的,就变成了“一个人的战斗”了。

  好了,来谈谈何时进行层分离吧。层分离,最好不要在刚接到一个项目时进行。(尤其是没有专职系统设计师和专职的需求分析师,而且程序员本人还是初级程序员的状况。)理由上文已经给了说明了。何时进行呢?其实如果仅仅只是一个要求不是多,功能不是很复杂的小型系统中,用不着进行分层。只需要进行方法的重构,保证在将来维护的人能够看懂你当初在设计这套系统的思路就可以了。那什么项目需要分层?就拿我当前接到的项目进行分析吧。我目前接手的项目,是采集现场数据(一天大约有5万条数据)存到数据库当中,在采集端,需要查询大量数据(有时可能是半年的)。而且在数据查询时,现场采集不能够中断。在这样的系统中,将来还会增加两个功能几乎一致的采集点,这两个新增的采集点不需要大量数据的查询功能,只需要实时反馈最近一段时间的数据就可以了。还有一个单独的反馈点,不用做采集,是仅仅用来反馈数据。估计很多程序员看到这里会头晕,而有经验的程序员一看到这里就会知道,系统这么设计肯定是受到了硬件的制约。否则能够设计出这样一个构造上不一致的系统,肯定是一个非常平庸的程序员。

  说到这里,就该清楚了。这个系统是需要合理分层的。如果仅仅在UI层完成这些事情,会因为UI线程的限制,导致了大量冗余的代码,并且可能会造成程序大量的拥堵,甚至可能会造成采集的数据丢失。UI线程里也是可以创建多线程的,但是为什么会受到限制呢?因为在采集的过程中,多线程会面临一个显示刷新的问题。如果刷新得慢(比如大量数据查询后进行的数据刷新),那么采集的那个线程就会停止在那里,进入排队系统,等候前面的作业完成。大量冗余的代码就比较好理解了。因为在非UI线程,调用UI控件,需要考虑到UI控件的同步问题。一个UI控件就是一个同步。假使是一对UI控件,那么这个同步考虑就更为复杂了,稍微有个UI控件没同步,就会造成程序的异常退出。程序的拥堵,就是排队排很长。一天5万条,也就是2秒钟一条,如果查询时间和控件刷新时间超过5分钟,也就是有150条数据在程序中排队,而界面更新完成后,还需要等这150条数据更新到数据库中。数据丢失,主要发生在单线程采集上,因为单线程采集的时候,页面刷新,这时就停止采集,所以那部分数据就会流失。而多线程采集也会造成数据丢失,因为UI层没进行分离,所以在查询大量数据时程序进入“假死”状态,客户会由于不耐烦而停止等候,直接关闭程序或者重启计算机。那些排队的数据就这样“消失在世界的尽头”了。

  分析何时分离就到这里了,还有些实际经历的项目需要分层的就不一一列举了。大概也就是说,分层是一个很好的东西,但是考虑到这个技术的复杂性,需要每个程序员根据需要来用。而不是一上来就用,或者动不动就用。这样不仅没有好处,反而会得不到它应有的效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值