【问题标题】:About methods in OOP关于 OOP 中的方法
【发布时间】:2013-02-06 21:23:48
【问题描述】:

我是 OOP 方面的新手。

我了解类、方法等,但我在哲学上遇到了麻烦。

现在,我正在做一个项目来管理项目,包括项目管理、类、方法、变量、用户、组、日志和任务管理。

所以,从Project 类开始,我有:

public function create_project()
public function get_projects()
public function delete_project()

那么,ProjectClass 类:

public class create_class()
public class get_classes()
public class delete_class()

但是,我虽然这不是正确的方式,所以我改为:

Project 类方法:

set_name、get_name(和类似方法) 添加类 获取类 添加日志 获取日志

ProjectClass 类方法:

set_project_id(并获取) add_variables(并获取) add_method ...

所以,在第一种情况下,Project 类创建新项目,ProjectClass 类创建类,Method 类创建方法,在第二种情况下,@ 987654330@ 类创建和管理其类,是 ProjectClass 类创建和管理其方法。

那么,这些“风格”是否正确?

如果第二种情况是正确的,那么谁创建了项目?本身?

非常感谢

【问题讨论】:

    标签: oop class methods


    【解决方案1】:

    在一般情况下,如果您没有明确的责任分配(我指的是 getter 和 setter 之外的行为),很难判断一个设计是否比另一个更好。随着时间的推移,我从前期设计转向迭代/增量设计,一次解决一个问题并根据需要重构设计。在这种情况下,我会尝试制定系统的基本要求,并为每个系统启动一个设计实施周期,并在您处理新要求时重新构建您的模型。

    只是一个例子考虑这个问题:拥有一个不受项目限制的类是否有意义?如果答案是,那么最好使用Project>>createClass(aClassName) 之类的方法,因为您明确声明类是在项目的上下文中创建的。您还可以在方法的实现中在类和它所属的项目之间建立适当的连接。然而,在将项目作为参数的ProjectClass 类中定义构造函数也是一种有效的方法。这样你就是说“如果你想创建一个新类,那么你必须提供它所属的项目”。使用哪种方法取决于很多因素,其中之一是程序员的喜好:),因此如果没有特定的上下文来评估它们,很难说一种方法是否比另一种更好。

    最后,如果有帮助的话,还有几点值得一提:

    • 假设public function create_project()是实例方法,为什么Project的实例知道如何创建其他项目?起初它没有多大意义,因为这基本上是类方面的责任,除非你对此有特定的动机(例如,像 Prototype 模式)。
    • 为什么项目会回复get_projects()?它们有某种关联吗?还是只列出所有项目?话又说回来,这听起来像是类方面的责任。
    • 我一般不喜欢将消息接收者表示为消息的一部分的概念。所以,我不会将消息称为delete_project(),因为声明$project->delete_project() 是多余的(您已经知道消息的接收者是一个项目)。
    • 您应该与您的班级名称保持一致。如果您使用ProjectClass 来表示类,那么您应该使用ProjectMethod 来表示方法(尽管我个人不喜欢这些名称,恕我直言,它们具有误导性)。选择正确的名称并使其在您的域模型中保持一致非常重要。

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-15
      • 2011-06-15
      • 1970-01-01
      • 2016-12-22
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多