OOA到底是省事还是费事?请大家讨论一下面向对象思想和理论在数据库应用程序中的设计方案
近来要设计一个小型的数据库应用程序,打算采用UML建模,全面应用面向对象理论。
在设计时发现了这么一个问题:
在许多有关OOA的书籍中,都强调要先抽象出业务对象类(实体类),比如订单类什么的,如果按这样设计的话,那么必然需要有一个将对象转存为关系数据库的过程,这就要求每个实体类如果需要持久保存的话,都必须有一个类似于串行化的函数,解决从数据库记录中重建和保存实体对象的问题。
用户通过窗体等用户界面操作这些实体对象完成各项工作,而不是直接与数据库打交道。
但我发现这样的设计方案存在一点问题:
首先:数据库访问组件返回的都是记录集或是XML格式流,再将其信息抽取出来创建对象,必然会影响效率;
第二:由于用户界面只与中间层对象互动,就无法利用数据绑定组件的强大功能,当然可以让中间层组件也具有数据绑定功能,但那样开发难度会加大,是否值得这样做?
第三:数据库应用程序中大量的操作是增删改查记录,如果不能直接访问数据库,而要通过中间层对象访问数据,那么就必须设计一个对象容器并对这个容器设计增删改查算法,再由这个容器负责调用每个持久类的相应方法将数据写回数据库中。
也许举个具体的例子说得更清楚:
一个订单类是一个需要保存到数据库中的实体类,它的数据假设被存放在关系数据库中的某个表内,当程序用SQL命令取出这些记录之后,下一步就需要根据记录中的实际数据在内存中重新创建订单类的实例,然后再将其显示到窗体的可视组件上。
用户必然要增删改查订单,我可以用一个Vector来存放这些订单对象,由另外一个类我称之为订单容器类来实现对订单对象的增删改查,同时每个订单对象也必须知道如何将自己数据写回到记录集中,而最终在某个时间统一地更新到数据库这个工作显然应由订单容器类负责完成。
这样的方案我觉得可以行得通,但却失去了将记录集与用户界面绑定后简单直接明了的优点。系统是灵活了,但对程序员的要求却更高了,开发难度加大,代码量可能会比记录集直接绑定的方法更多,OOA到底是省事还是费事?
有没有更好的设计方案?对于小型的单机或C/S结构的数据库应用程序,是不是没有必要进行全面向对象的设计?
另外,中国的实情是缺乏大量真正理解OO理论和技术的普通程序员,拿这个例子来说,有了系统的详细设计方案,要把它变成真正的软件,这个程序员就必须学过UML,同时能够理解这个面向对象设计方案,同时还必须踏实地掌握一门OO语言如C++和Java,这对程序员的要求是不是过高了?不容易找到达到这个水平的普通程序员。所以 科学性与可行性又成了一个矛盾!
请所有OOA和OOD、OOP的高手指教。