关于OOP中的方法

关于OOP中的方法,oop,class,methods,Oop,Class,Methods,我是OOP方面的新手 我了解课程、方法等,但我在哲学方面遇到了麻烦 现在,我正在做一个项目来管理项目,包括项目管理、类、方法、变量、用户、组、日志和任务管理 因此,从项目课程开始,我有: public function create_project() public function get_projects() public function delete_project() 然后,ProjectClassclass: public class create_class() public c

我是OOP方面的新手

我了解课程、方法等,但我在哲学方面遇到了麻烦

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

因此,从
项目
课程开始,我有:

public function create_project()
public function get_projects()
public function delete_project()
然后,
ProjectClass
class:

public class create_class()
public class get_classes()
public class delete_class()
但是,我认为这不是正确的方法,所以我改为:

项目
课程方法:

set_name、get_name(以及类似的方法) 添加类 上课 添加日志 获取日志

ProjectClass
class方法:

设置项目id(并获取) 添加_变量(并获取) 加法

因此,在第一种情况下,是创建新项目的
Project
类,创建类的
ProjectClass
类和创建方法的
Method
类,在第二种情况下,是创建和管理其类的
Project
类,是创建和管理其方法的
ProjectClass

那么,这些“风格”是正确的吗

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


非常感谢您

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

只是一个例子来考虑这个问题:有一个没有被项目约束的类是有意义的吗?如果答案是,那么最好使用

Project>>createClass(aClassName)
这样的方法,因为您明确声明类是在项目上下文中创建的。您还可以在类和方法实现中所属的项目之间建立适当的连接。但是,在
ProjectClass
类中定义一个以项目为参数的构造函数也是一种有效的方法。这样你就可以说“如果你想创建一个新的类,那么你必须提供它所属的项目”。使用哪种方法取决于许多因素,其中一个因素是程序员的品味:),因此,如果没有特定的上下文来评估它们,就很难说明一种方法是否优于另一种方法

最后,如果有帮助,有几件事值得一提:

  • 假设
    公共函数create_project()
    是一个实例方法,为什么
    项目的实例知道如何创建其他项目?一开始,这没有多大意义,因为这基本上是一种班级责任,除非你对此有特定的动机(例如,喜欢这种模式)
  • 为什么项目回答
    获取项目()
    ?他们有什么关系吗?或者只是列出所有的项目?再说一遍,这听起来像是班级的责任
  • 我通常不喜欢添加消息接收者作为消息的一部分表示的概念。因此,我不会调用消息
    delete\u project()
    ,因为它对于声明
    $project->delete\u project()
    (您已经知道消息的接收者是一个项目)是多余的
  • 你应该和你的类名保持一致。如果您使用
    ProjectClass
    来表示类,那么您应该使用
    ProjectMethod
    来表示方法(虽然我个人不喜欢这些名称,但我认为它们有误导性)。选择专有名称并在域模型中保持它们的一致性是非常重要的