项目是spring+Hibernate的,当然了,也是采用的NVC三层架构。这里我主要想不透的一点是其模型层,也就是数据层的问题。在此抛砖引玉,引出大家的看法。
模型层主要是有两种对象,一个的Domain,一个的DTO(Data Transport Object)。Domain是用作相对的数据库表的一一映射的,里面完成了相应的简单的对于一张特定的表的增删改查;DTO是针对页面来设计的,DTO里面的数据以页面为单位,一个DTO里面的字段和属性就是针对于具体页面层的所需要的数据来设置的,也就是说,一个页面对应一个DTO(WebForm1>WebForm1_DTO,WebForm2>WebForm2_DTO……)。在实际的开发当中,我们的业务,也就是每个页面所要调用的具体的业务方法都写在业务层,需要返回数据,就用DTO来封装,需要操作数据,也是在业务层中自己写的专有的方法,不管是用程序中的SQL,还是调用数据库的SP,始终就没有用到Domain的一丁一点。
具体来说是这样的,我们要返回的数据,基本上都不可能来自于一整张表的完全一条数据,那样一来多余的信息也有,缺少的信息也有,我的一个页面需要返回一个学生的有选择的基本信息和他的有选择的成绩的信息,那么,StudentInfo表和Score表都不能满足我的信息的请求,我还是得靠自己的DTO才能满足我的要求;那么,我的数据实体层映射还是需要DTO来完成。所以我就越来越搞不明白,既然我们的数据传输只需要对应页面的DTO,那么,我的这些数据库映射实体类还用来有什么存在的意义呢?
模型层主要是有两种对象,一个的Domain,一个的DTO(Data Transport Object)。Domain是用作相对的数据库表的一一映射的,里面完成了相应的简单的对于一张特定的表的增删改查;DTO是针对页面来设计的,DTO里面的数据以页面为单位,一个DTO里面的字段和属性就是针对于具体页面层的所需要的数据来设置的,也就是说,一个页面对应一个DTO(WebForm1>WebForm1_DTO,WebForm2>WebForm2_DTO……)。在实际的开发当中,我们的业务,也就是每个页面所要调用的具体的业务方法都写在业务层,需要返回数据,就用DTO来封装,需要操作数据,也是在业务层中自己写的专有的方法,不管是用程序中的SQL,还是调用数据库的SP,始终就没有用到Domain的一丁一点。
具体来说是这样的,我们要返回的数据,基本上都不可能来自于一整张表的完全一条数据,那样一来多余的信息也有,缺少的信息也有,我的一个页面需要返回一个学生的有选择的基本信息和他的有选择的成绩的信息,那么,StudentInfo表和Score表都不能满足我的信息的请求,我还是得靠自己的DTO才能满足我的要求;那么,我的数据实体层映射还是需要DTO来完成。所以我就越来越搞不明白,既然我们的数据传输只需要对应页面的DTO,那么,我的这些数据库映射实体类还用来有什么存在的意义呢?