可能我之前发帖对问题的描述不够准确。我现在再说一下。 
我现在的项目分层结构是这样的Web BLL DALFactory Model IDAL  SQLServerDAl DBUtility 
比如说,Model内有个User实体类(ID,Name,Password,Sex,Age 等四个属性) 现在项目组里有人建议,再创建一个名为Entity层。比如说,在里面建立UserPost实体类(Name,Password)专门用来注册。再创建UserInfo实体类(ID,Name,Sex,Age )用来显示用户信息 Entity层只提供给UI和BLL层调用,Model只供DAL调用 使用的时候,将UserPost或者UserInfo的实例对象赋值给User的实例对象 我想请问一下,有没有这种必要,如果,我有一千种不同的行为,我就要创建一千种不同的实体类,这样做会导致代码的高度冗余 请教~~

解决方案 »

  1.   


    比如说,我将Name属性抽象成一个类,然后用UserPost和UserInfo来继承这个类,是这样吗?但感觉如果创建很多个类的话,还是会导致冗余的啊。
      

  2.   

    同你上次那个帖子一样,你们还是没分清楚 “行为”和“对象”的区别行为是行为,对象是对象,行为是用来操作对象的,而不是代表对象本身。你说你们有IDAL,那么我请问你的IDAL是在哪里实现的,IDAL是行为接口,这些行为接口必须有个具体的类去实现它。这个类可以是一个,也可以是N个。实际上你的同事并不是让你去建立N个类,你的同事只是让你去实现你IDAl的那些接口至于UserPost 和 UserInfo 这个实际和行为无关,这个是一个为防止扩展做出的防范性设计。
    userPost是基类,userinfo是子类,这个是为了防止以后出啥 vip用户,高级黄金用户,163通信证,那种类的要求而做的防范设计
      

  3.   

    userPost是基类,userinfo是子类 ?? 这两者有什么直接联系呢userPost和userinfo都是User的子集,两者并没有实际联系。IDAL当然是由SQLServerDAl来实现,在BLL层中建立的userPost和userinfo实体类,怎么会是让我去实现我的IDAl的那些接口呢? 
    而且userPost和userinfo实体类应该只具有属性,不应该有方法,何来实现IDAl呢?
      

  4.   

    这个问题很面熟...你要先弄清楚...为什么要把UserPost和UserInfo分开?属于一个对象的属性掰成两个有何好处?“有人”的意思是,有些属性不常用还是有些属性不该公开?不常用的就该用两个或更多组合类或接口来重构,不该公开的根本就不应该作为属性出现...而不是这样画蛇添足地堆砌几个类为了OO而伪OO或者为了ORM搞些不伦不类的东西...
      

  5.   

    他的逻辑感觉是对的,但把UserPost和UserInfo分开确实有画蛇添足的感觉我现在有点不明白放歌兄的领域模型和实体模型,是在什么请求下出现的?
      

  6.   

    你们项目组的人都应该去认真学学OOA/OOD再来搞设计...不是写几个类就叫面向对象了...
      

  7.   

    如果我没有理解错的话,楼主的意思是UserPost和UserInfo都是一般的实体类,他们于user类没有什么继承关系,只是user类的简化版本用在不同的场景中,只是作为强类型的数据结构在各个层之间传递数据,他们也没有行为只有属性,所有的行为都是与之相关的DAL里面实现的。其实只有一个user类就行了啊,如果说有的时候需要一个比较简洁点的实体类,可以使用继承。
    User
    ID
    UserName
    PasswordUserInfo : User
    Sex
    ...
      

  8.   

    多建几个数据实体的话,比如,将User对象拆分的话,是不是有点怪?不像是一个整体啦
      

  9.   

    你要知道数据实体本身就是个不伦不类的东西,是OO和不OO的关系型数据库妥协的产物...所以重点应放在业务实体,数据实体是配合迁就业务实体的...数据实体实际上就是二维表...书的话还真不清楚,我不看技术类书的...
      

  10.   

    是的...三层架构中的核心是业务逻辑层,一切都是围绕业务对象设计,而业务逻辑层是为UI服务的,UI则是以用户需求为根本,所以一切归根到底都是以用户需求为导向的...数据访问层恰恰是最不重要的,所以才会有那么多成型的ORM产品,因为数据访问层基本跟用户没什么关系...