0

我在 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(和类似方法) add_class get_classes add_log get_logs

ProjectClass类方法:

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

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

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

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

非常感谢

4

1 回答 1

0

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

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

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

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

高温高压

于 2013-02-07T12:18:56.520 回答