关于组件的类的设计

时间:2014-09-22 11:29:27

标签: object design-patterns

让我们抽象说我想编写两个关系为1到n(很多)的类,我不知道最好的方法是什么。编程语言并不重要!!!

  

班级家长        {
  字符串名称;
  出生日期;
  array children [];
//最好在这里声明一个子数组并将childrenobjects添加到>这个或者在子类中更好地指向一个类型为Parent的对象的变量指针???? / p>      

...构造函数setters getters ....
   
  function addChild(Childtype childvar)
           {
           这个 - >孩子们推着孩子们            }
  function removeChild(Childtype childvar)
           {
           }
  

  function saveDB()
           {
           //我在那里只保存父项或者在运行时创建的子项>并添加到该对象的实例中????
  
           插入relational_db_table值(name,birthdate);
  
           //真的不确定什么是最好的,为什么呢            foreach key->孩子的价值                     {
                    儿童安全> saveDB()
                    }
           }
  }
  
  class Child {
  父亲myparent;
  字符串名称;
  字符串描述;
  ......施工人员定居者吸气鬼...... //无所谓   
  saveDB {//
   INsert into relational_db_table VALUES(name,description,myparent);
  }
  }

所以我现在重复我的两个问题: 1.什么是最好的,为什么? a)在父类中声明一个包含子节点的数组 b)在子类中声明一个包含父对象引用的变量 c)完成以上两个

  1. 关于保存到数据库什么是最好的,为什么? 如果我采取a)形式第一问题的方法,我必须保存孩子,因为我从父类写道因为我不能看到我还能如何将孩子保存到数据库供以后使用。在这里任何其他方法??
  2. 如果我拿b,我将不得不以某种方式管理一个父母的孩子在记忆中将与一个集合没有任何问题,这不是一个问题。但是在这种情况下,如果有任何改变,我可以分开保存,嗯,不确定。

    请用应用程序后面的数据库对这些问题的事情数据库是不必要的关系对于我也可以使用nosql数据库。我只对将这些类设计得非常好而感兴趣,所以将来如果必须改变某些东西将很容易改变,我希望尽可能使用最好的编程模式。我已经阅读了几乎所有现有的OOP编程模式,但我仍然无法决定最好在这里做什么。

    PS:抱歉代码没有标签

    非常感谢!

1 个答案:

答案 0 :(得分:0)

我会采用第一种方法,

class Parent {

    private String id;
    private List<Child> childList;

    public List<Child> getChildList() {
        return childList;
    }

    public String getId() {
        return id;
    }

}

class Child {

    private String id; 

    public String getId() {
        return id;
    }

}

您可以插入多个父级的数据,

    List<Parent> parentList = getParentList();
    for (Parent parent : parentList) {
        String parentId = parent.getId();
        for (Child child : parent.getChildList()) {
            String childId = child.getId(); // Parent info
            // Add to DB - you can pass parent info & child info
            // insert parentId, childId 
        }

    }
  

为什么每个孩子都没有引用其父母?

在这种情况下,您需要有一个包含子项的列表,这将打破OOPS概念。 (对于Eg:Parent,作为对象需要了解其子代)

  

如何对DB有用?

在这种情况下,您可以轻松导航到所需的父级(如果现在不需要,将来也可以)&amp;只将其对应的子元素插入到DB中。如果你选择选项2,你需要循环遍历所有子元素(这可能非常长 - 效率不高)

  

您是否会将函数放入数据库中?

在代码中注释。