您的位置:首页 > 其它

一直不是很明白,作为用户控件,应该掌握多少权力?

2008-06-25 11:33 295 查看
ASP.NET中有用户控件,这为开发提供了极大的便利,功能分开做成控件,一方面是解放了像ASP、PHP中页面太“重”的局面,一方面是控件是可复用的。

但是有个问题,我却一直不是很明白:

一个.ascx的用户控件,它有自己的生命周期(当然更多时候是基本上和页面同步的),它甚至有自己的Page_Load事件,ASP.NET也直接赋予了用户控件以Request, Response, Session等权力,这极大的强化了用户控件的能力,但是却给我带来了一个奇怪的困惑——用户控件到底应该掌管多大的权力?或者说,它的逻辑范围应该有多大?

在我看来,用户控件是不应该直接去访问Request的(比如Request.QueryString),因为那是页面级别的,而一个用户控件不应该知道自己出现在哪个页面里,所以用户控件是不应该去访问页面级的东西的。所以我通常都是给用户控件制定好Property,然后由aspx来获取到QueryString,再给用户控件赋值。我觉得这样做,可以比直接在用户控件里使用Request.QueryString获取参数更能复用,因为用户控件应该是页面无关的。

第二个,是一个很有趣的话题,用户控件该不该自发地去决定状态?可能这句话说的不是很清楚,举个例子:一个控件的作用是:如果用户没有登录,则显示登录界面,如果已经登录,则显示欢迎界面。对于这个控件而言,它是存在不同的状态的,而这个状态是又控件自发地去获取(比如通过Page.User.IsInRole),还是在aspx里用同样的方法去获取状态,再给控件赋值呢?也许这个问题比较钻牛角尖吧,不过我还是比较想不明白,现在对于这种用户控件我一般都是让控件自己判断状态,省的页面再给它赋值。

再一个就是用户控件是否应该访问数据——当然在这里我并不是指直接访问数据,而是通过数据访问层去访问?我觉得这是一个很奇怪的问题,举个例子,一个控件的作用是,显示自己的心情短语,并且可以编辑,并且更新。这时候,控件就涉及到了数据访问。控件先要获取到了当前的心情短语,显示出来;如果用户编辑,它又要把心情短语的数据更新。从逻辑上看,这很正常,控件维护着自己的逻辑:Read->View->Update->View again。但是给人很奇怪的感觉:这里控件访问了数据,我不知道这是“对的”还是“错的”(虽然很可能根本就没有对错之分),如果说是不对的,那么应该怎么做呢?难道是给控件制定一个OnMoodWordsUpdate事件,然后又让页aspx来处理这个事件吗?这样也很奇怪,因为虽然数据访问的权力交给了page,但是如果这个控件需要在多个地方使用,那么就要多次处理它的OnMoodWordsUpdate事件,显然这些个事件处理都是相同的,这就违背DRY原则了。所以我现在还是把这样的权力留在了控件里面,让它有权访问数据。

看来自己的功力着实很浅,而且也许钻牛角尖走歪路了也说不一定,路还很长,必须继续努力啊。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐