表单对象、值对象、及持久化对象浅谈

    我们在做Web开发的时候经常会涉及到从表单提取数值,保存到数据库的操作。这个操作最直接的做法就是直接从表单读取数据,直接存储。做过OO设计的都知道这样不利用日后维护,而且在代码重用上也没什么建树,代码量大,在性能上也难以提高。
    通常我们会采取建立表单对象(Form Object),值对象(ValueObject)和持久化对象(Persistence Object)的做法,将页面值存储在FO中,通过VO将FO中想要保存到数据库中的格式化数据传到PO中,最后通过持久化工具将PO存储。简单来说就是一个如下的过程:
引用
FO——(格式化)——VO——(提取,组装)——PO——DB

    因为通常页面上的数据是不能直接存储的,所以,需要一个格式化的过程,将页面的数据转化成数据库中对应的数据类型,这个过程涉及类型转换,字符串拼接,字段定义(特殊字段特殊含义)等等。由于数据库范式的要求,从页面上来的数据可能同时对应着多张表,比如:一个Person信息FO同时包含了Person信息的PO,关联信息Relationships,Address等PO;有的时候直接便是以主子表的形式出现。这种情况下我们便需要对FO进行重组,以生成对应数据库表的PO然后才能存储。
  
    存储的时候按照上面的过程便可以得到比较好的解决,但在页面展示的时候,如果按照上面的反过程,那么我们首先面临的便是经常性的多次查询和表连接,因为我们在做PO对象组装时每个PO对象便意味着一次查询。
    在页面展示的时候,我比较倾向于创建视图和函数,实现查询过程化。一方面提高的数据查询的效率,一方面简化了DB层的代码,还有利于系统和数据库的维护。
    在创建视图和函数时候,我们可以针对日常使用比较频繁,对数据库消耗比较大,如表连接,多次查询,子查询等情况。在创建函数和视图时尽量提高其综合利用度,这有利于降低数据库开销,和维护难度。但提高综合利用度不应当以过分的牺牲性能为前提。

你可能感兴趣的:(Web,OO)