【问题标题】:Should an object set its own attributes within the constructor?对象应该在构造函数中设置自己的属性吗?
【发布时间】:2011-05-03 20:27:29
【问题描述】:

一般来说,我想知道一个对象是否应该根据构造函数中的一个参数来设置自己。例如:如果在构造函数中指定了对象 ID,那么对象本身是否应该通过从数据库中获取其他数据来设置自己的变量?或者,是否应显式创建另一个类来创建此对象,然后将数据库从对象中隐藏起来。

【问题讨论】:

    标签: object attributes constructor


    【解决方案1】:

    这是我的建议

    1. 使用 ObjectFactory 模式进行此基于 ID 的构造。任何开始类似于食谱的东西,ObjectFactory 模式效果最好。

    2. 我不建议在 Object 的构造函数中使用对数据库的依赖。您也可以将此数据加载逻辑放在 ObjectFactory 中。

    基本上我觉得一个类的实现应该尽量精简。

    【讨论】:

    • 你会为每个单独的对象创建一个对象工厂吗?或者,一个创建许多对象的工厂?
    • 我会为每个类类型创建一个 objectFactory。例如。如果我的班级是“汽车”,我将有一个名为“汽车工厂”的班级,其中包含一堆静态方法,例如'createByName(..)' 以便用户通过说'Automobile a = AutomobileFactory.createByName("BMW")'来调用它
    • “createByName(..)”然后可以在数据库中查找如何处理名称“BMW”。我会得到所有需要的细节并建造一辆汽车
    【解决方案2】:

    另一个类可能应该通过从数据库中读取创建对象所需的值来实例化对象。这是一个更好的关注点分离。保存值的对象可能只是一个 JavaBean,即值保存对象。我当然不会为单个对象添加数据库访问代码。

    【讨论】:

    • 好的,我就是这么想的,谢谢! ~这就是我编写第一个应用程序的方式,虽然呵呵
    【解决方案3】:

    取决于场景。但根据经验,您应该尝试将对数据库的访问与对象分开。就个人而言,我可能会选择一个构建器类,它有一个用于数据库访问的可注入接口,并且会返回/构建一个对象。

    请注意,在很多情况下,让对象自行创建就可以了。

    【讨论】:

      【解决方案4】:

      如果它足够复杂,您可以考虑实现一个工厂 (http://en.wikipedia.org/wiki/Factory_method_pattern)。

      我相信这可能就是您在帖子中描述的“另一个对象”,这有助于创建。

      【讨论】:

      • 我觉得这个链接有点难以理解,但它是说你可以创建一个知道如何创建各种不同类型的预设对象的工厂?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2018-06-11
      • 2013-12-10
      • 1970-01-01
      相关资源
      最近更新 更多