如何识别对象的责任?

时间:2014-06-19 16:04:40

标签: oop design-patterns uml modeling

我是OOP的新手,我刚开始学习它。它太复杂,无法确定类的功能。让我们举一个例子:

我们有一个地址簿,用户想要添加一个新的联系人。 在这种情况下,我们有两个类:

  • 用户:确定登录的用户。
  • 联系:包含姓名,地址,电话号码等的联系人对象

问题:

  • 谁必须保存新联系人?用户类或联系人类
  • 如果我们尝试检查用户的许可,然后再做最适合的地方吗?
  • 这些类是否可以访问数据库?(创建第三个类来执行查询工作是否更好?)

感谢任何好主意;)

3 个答案:

答案 0 :(得分:1)

可用的责任分配"责任"是一个OOP设计和架构决策,没有一个简单的正确答案。有关讨论,请参阅Stack Overflow问题What is the single most influential book every programmer should read?

您将通过编码(使用某人的设计或创建自己的设计效果不佳)来了解优缺点。

然而,有一些有用/频繁的责任分配,称为http://en.wikipedia.org/wiki/Software_design_pattern

在我看来,唯一固定的事实是每个类/功能/结构都应该明确定义/记录其责任 - 因为最初的代码行 - 和&#34; do one thing and do it well&#34; < / p>

答案 1 :(得分:0)

联系人是特定于用户的。因此,每个用户对象(类实例)都应该包含自己的联系人对象,该对象是联系人(其他用户)对象的容器,包括名称,地址,电话等。

class User {
    String name;
    String phone;
    String address;
    Contacts contacts;
    ....
}

class Contacts {
    List<User> items;
}

Contacts类应该具有保存新联系人的实现,需要从User方法调用,如下所示。

User u;
Contacts c = u.getContacts();
c.addContact(name, address, phone);

应在User类中检查用户的权限。

这些类的方法应该与数据库连接。为此,每个类方法都可以打开与数据库的新连接并执行SQL查询。用户cass的示例方法:

User getContact(String name) {
    Connection conn = getConnection();
    ....
    PreparedStatement ps = con.prepareStatement("select * from Contacts where name = ?");
    ...

    return userRcd;        
}

答案 2 :(得分:0)

1)保存新联系人必须是单独的类,它直接与数据库一起工作 2)检查用户权限的最佳位置 - 当然是用户类 3)参见第1项:)

我建议您充分了解SOLID原则,以及良好设计的基础知识。