yeagen 2011-09-21 23:19
浏览 163
已采纳

我是一个oo初学者,想向大家讨论一下方法责任划分的问题。

代码是C#的,请大家帮忙指教
需求是:用户查询自己已经记录过的饮食情况。
有user类和food类。
第一种设计是(直接由User类来直接读取数据):

public class User
{
    private string username, email;
    ...//省略get;set
    public List<Food> readFood()
    {
        //这里读取数据库获取信息
    }
}
public class Food
{
    string foodname, foodweight;
    ...
}

第二种设计(User类委托Food类来查询):

public class User
{
    private string username, email;
    ...//省略get;set
    public List<Food> readFood()
    {
        //这里委托Food类进行处理
        Food food = new Food();
        return food.readFood(this.username);
    }
}
public class Food
{
    string foodname, foodweight;
    ...//省略get;set
    public List<Food> readFood(string username)
    {
        //这里读取数据库获取信息
    }
}

1.请问以上两种方法,一种是直接在用户类中读取数据库,一种是委托Food类自己来读取数据库,哪一种好一些呢?
2.第二种方法中由于Food类中含有readFood方法,并不是一个纯的实体类,那么,用这么一个不是纯实体类来传递参数好不好?会不会有违反oo原则之嫌?
3.第二种方法的情况下,如果我为Food类单独声明一个属性专用接口,用于传递属性,这样好不好呢?是不是有点画蛇添足了呢?(代码如下)

public interface IFoodModule
{
    string Foodname { get; set; }
    string Foodweight { get; set; }
}
public class Food : IFoodModule
{
    ...//省略get;set
    public List<IFoodModule> readFood(string username)
    {
        //这里读取数据库获取信息
    }
}
  • 写回答

2条回答 默认 最新

  • zhaoming23 2011-09-22 11:32
    关注

    对,我的意思是说,接口尽量定义一些不变的东西。接口最大的弱点就是不适应频繁的变动。
    是否可以提供一个封装比如
    [code="java"]
    public class FoodParameter {
    String Foodname { get; set; }
    String Foodweight { get; set; }
    //etc...
    }
    [/code]

    然后再
    [code="java"]
    public interface IFoodModule
    {
    FoodParameter getFoodParameter();
    }
    [/code]

    这样的目的是使接口定下来。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况