【问题标题】:how to recognize object's responsibility?如何识别对象的责任?
【发布时间】:2014-08-10 06:18:38
【问题描述】:

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

我们有一个地址簿,用户想向其中添加一个新联系人。 在这种情况下,我们有 2 个类:

  • 用户:确定登录的用户。
  • 联系人:由姓名、地址、电话号码等组成的联系人对象

还有问题:

  • 谁必须保存新联系人?用户类或联系人类
  • 如果我们在做任何事情之前尝试检查用户的许可,那么最好的地方是哪里?
  • 这些类可以访问数据库吗?(创建 3rd 类来做查询工作更好吗?)

感谢您的任何好主意;)

【问题讨论】:

    标签: oop design-patterns uml modeling


    【解决方案1】:

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

    您将通过编码了解利弊(使用某人的设计或创建自己的设计,但效果不佳)。

    但是,有一些有用/频繁的责任分配已被称为http://en.wikipedia.org/wiki/Software_design_pattern

    在我看来,唯一固定的事实是每个类/函数/结构都应该明确定义/记录其职责 - 从代码的第一行开始 - 和“do one thing and do it well

    【讨论】:

    • 感谢您的回答。在你回答之后,另一个问题浮现在脑海中,我应该从哪里开始?!!
    • 熟能生巧”。您可以阅读设计模式,然后编写代码(或 UML draw-it),其中保存联系人、保存用户、保存某些 DB 访问层,等等。并从您的角度进行比较,哪个更好,哪个更易于维护,哪个可以安全密封并且以后不需要任何扩展等。在我早期,我通常写 4 个原型,其中 3 个是迟早扔掉。如果我被卡住了,我会尝试另一种方法。 开始编码
    【解决方案2】:

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

    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 查询。 User cass的示例方法:

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

    【讨论】:

      【解决方案3】:

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

      我建议您深入了解 SOLID 原则,这是良好设计的基础。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        相关资源
        最近更新 更多