技术开发 频道

实战项目分析

4. 强类型DataSet

    上面讲到了业务对象和强类型DataSet两种领域模型的使用问题。其实强类型DataSet是.NET中很好的一种方案,它集成了数据库和面向对象两种优点,如果使用的好的话,会事半功倍,但使用不好的话,麻烦也很大。

    在本系统中,强类型DataSet被赋予很多使命:从数据库中获取信息(数据存取层)、业务处理(业务逻辑层)和数据展现(展现层),贯穿了整个系统。这样就使得整个系统对强类型DataSet的数据结构非常依赖,一旦数据库发生变化,所有的代码(从数据存取到展现层)都要修改代码来。并且最要命的是强类型DataSet可以自动感知数据库的变化,自动更新同步。试想,如果你是这个系统的编码人员,会不会时时都提心吊胆呢?

    很显然,这是一种糟糕的设计。在分层结构中,任何数据结构都不能贯穿始终,特别是与数据库结构。这回带来难以置信的麻烦。分层,其实就是要隔离这种变化给系统带来的连锁反应。使底层的修改不影响到顶层,反之亦然。

    当然这是不是意味着强类型DataSet就不能使用了呢?当然不是的。强类型DataSet是非常好的连接数据存取层和业务逻辑层的纽带,因为它既有数据库结构又有对象特性。所以,只要我们能在两个层次中各自屏蔽细节,依赖于抽象而不是实现,强类型DataSet就可以在系统中发挥重要的作用。

5. 展现层太臃肿

    本系统的很大一部分UI都是B/S的,采用ASP.NET构建。但我发现很多的WebPage中包含有大量的界面逻辑和业务逻辑,基本每个WebPage的代码都在几百行,有点甚至上千行。试想,这样的UI维护起来…

    对于每一个开发者来说,大概都经历过这种痛苦,为了数据库的一个字段的修改,要从底层到顶层,全部修改一便,而且UI的修改是最麻烦的,往往是越改越烦!

    其实对于UI的设计模式已经很成熟了,大家都知道MVC模式吧。就是一个很成熟,很实用的UI设计模式。另外还有MVP模式,这个是MVC的基础之上提出来的,跟MVC思想相同,但细节上有所不同而已。MVC模式网上有很多的资料,也有很多有名的应用案例。MVP则被广泛应用在微软P&P团队的很多项目中,诸如:Software Factory系列中都有应用。

    下面是MVC模式和MVP模式的对比:


    另外,关于两种模式的详细对比,可以参考另一位MVP:TreeLee的文章:ASP.NET MVC Framework与WCSF中MVP模式之小小比较。

0
相关文章