假如说数据库中有一个account表用于保存用户个人资料,有id,username,password,address,phone等十几个字段.在对表进行操作时有时可能只需访问其中一个或几个字段,有时可能会访全部字段.那么:
1.设计的实体对象需要包括所有字段吗?
2.如果包括所有字段,那么对于只需访问其中部分字段的情况下,效率不是很低吗,在层之间传递的时候,不是存在相当多的冗余数据吗?
3.一般来说一个实体对象基本上对应的就是表中的行数据(个人理解),假使要得到一个数据集需要多次访问数据库并建立一个List吗?如果这样那么数据的汇总,排序等业务逻辑不是很麻烦的吗?

解决方案 »

  1.   

    1.设计的实体对象需要包括所有字段吗?一般应该包含所有字段2.如果包括所有字段,那么对于只需访问其中部分字段的情况下,效率不是很低吗,在层之间传递的时候,不是存在相当多的冗余数据吗?是这样,效率是低一点,但数据修改方法可以只写一个。
    3.一般来说一个实体对象基本上对应的就是表中的行数据(个人理解),假使要得到一个数据集需要多次访问数据库并建立一个List吗?如果这样那么数据的汇总,排序等业务逻辑不是很麻烦的吗?得到一个数据集不需要多次访问数据库的。可以返回一个DataReader或DataSet,然后转换成List.如果你获得了List然后再排序,或汇总当然麻烦,你可以把排序写道数据库查询中。
      

  2.   

    最近在研习PetShop,发现里面有一种函数中的可选参数,不知道用在这里怎么样。将经常用到的参数设定为必给,将不经常用到的参数设定为可给(在VB中这种参数要给一个默认值)。这样最起码对于只用个别字段的地方不用手动给那么多参数
      

  3.   

    不要纯粹的考虑程序的效率,也要考虑开发的效率,还有后期维护,技术人员离开后,换个人如果完全看不懂代码,那又怎么可以,所以一定要遵守一定的规矩,面向对象,多层,uml,orm,不以规矩,不成方圆.
      

  4.   

    我也有个问题,就是实体是一个类,操作是一个类比如 Account 只有用户的所有信息, AccountOP  就是操作比如 添加、删除、修改 add,delete 好做而对于修改,我不是很清楚,因为有时候我需要只修改密码, 有时候只修改其中的一个或者几个属性那个,这个update 方法该怎么写呢?   update(Account a)
    {
       sql="update account set name="+a.name ..............}
      

  5.   

    支持dapanda(一天) .
    careast(雅):为什么不把这两个文件合并成一个文件?是效率的原因吗?
    这不是效率的问题,而是你把逻辑和实体类写在了一起,那么没个实体类都要写些可能相同的方法,那么代码就冗余了,所以把逻辑写成一个类,不同类的不同方法和相同方法就分开了。。
      

  6.   

    http://www.microsoft.com/china/msdn/archives/library/dnbda/html/BOAGag.asp#boagag_howtodefinedac
      

  7.   

    为什么不使用“强类型数据集”?它从DataSet派生,可以得到相应的集合和实体。数据实体从datarow派生。这样可以继承所有dataset的好处,比如序列化,对xml的支持,可以使用DataAdapter填充,更新,删除数据
    vs2003和vs2005都对这种方法作了充分的支持,vs2005还可以自动生成查询和更新逻辑
      

  8.   

    偶做的设计的时候就是分user信息就是分两个表的,OP(id,cusername,cloginname,cpwd) userinfo(id,XXXXX,xxxxx,xxxxx,xxxxx)
    如果登陆就用
    public bool login()
    {
    //只访问第一个表,每个用户登陆都要做的嘛。
    }
    public DataSet UserinfoList(int id)
    {
    //就两个表都访问,要不干脆访问视图,呵呵不是每人都要查询的。
    }
    也不晓得这样做有什么好处,什么坏处。
      

  9.   

    cqq(脑电波):
    修改密码和修改信息分两处写,偶是这样做的。同时修改两个表?做成事务形式的哈。
      

  10.   

    AAF是最好的选择,呵呵。可以到我的blog看看。
      

  11.   

    定义属性 用到了再创建。
    xx
    {
     if(_xx == null ) _xx = new xx(); return _xx;
    }