【发布时间】:2018-11-26 14:02:19
【问题描述】:
我正在尝试为我的项目管理软件绘制一个描述以下场景的类图。 它包含
- 项目
- 经理
- 员工
经理可以创建项目
经理可以更改项目截止日期
经理可以更改项目名称
经理可以将一名员工分配给项目(单个项目只有一名分配的员工)
员工可以提交项目
并使用php在代码中实现它,如下所示
Class Manager {
private $Id;
private $name;
private $selectedProject;
public function __construct($name){
$this->$name = $name;
}
//manager create a project
public function createProject(){
$project = new Project('Web Dev','incomplete','2018/6/18');
$this->selectedProject = $project;
}
//manager can change project deadline
public function updateProjectDeadline($projectDeadline){
$this->selectedProject->SetProjectDeadline($projectDeadline);
}
//manager can change project name
public function updateProjectName($projectName){
$this->selectedProject->SetProjectDeadline($projectName);
}
//manager can assign a employee To Project
public function assignEmployeeToProject(Employee $employee){
$this->employee = $employee;
$this->selectedProject->SetProjectEmployee($this->employee);
}
}
Class Project {
private $Id;
private $projectName
;
private $projectStatus
;
private $deadline
;
private $assignedEmployee;
public function __construct($projectName
,$projectStatus
,$deadline
){
$this->$projectName
= $projectName
;
$this->$projectStatus
= $projectStatus
;
$this->$deadline
= $deadline
;
}
public function SetProjectDeadline($deadline
)
{
$this->$deadline
= $deadline
;
}
public function SetProjectEmployee(Employee $employee)
{
$this->$assignedEmployee = $employee;
}
public function setProjectStatus($projectStatus
)
{
$this->$projectStatus
= $projectStatus
;
}
public function setProjectName($projectName
)
{
$this->$projectName
= $projectName
;
}
}
Class Employee {
private $empName;
private $assignedProject;
public function __construct($empName){
$this->$empName = $empName;
}
//employee can submit project
public function submitProject(Project $project){
$this->assignedProject = $project;
$this->assignedProject->setProjectStatus('submit');
}
}
我想知道
我的类图正确吗?
我的实施正确吗?
以下方法的特别实现涵盖了良好的 OO 设计?
经理更改项目截止日期 - updateProjectDeadline()
经理更改项目名称 - updateProjectName()
我觉得代码有异味,因为在上面下面唯一要做的就是调用另一个类的 setter ....
P.S - 另一个是不好的做法类访问另一个类设置器,获取器(调用另一个类的设置器,获取器方法)?
【问题讨论】:
-
这对于 SO 来说有点太宽泛了(恕我直言),codereview.stackexchange.com 可能会更好?
-
您的类图和实现都不正确。特别是,您没有以正确的方式将员工分配给项目。您的单值
Project::employee属性没有意义。 -
我使用的假设项目只能分配一个员工
-
@Susantha7:您打算在 Manager::createProject 和 Employee::submitProject 中使用
$this->project = $project实现什么目标?这两个类都没有projectproperty。 -
@GerdWagner 为这两个类 Manager、Employee 添加了私有属性项目
标签: php oop uml encapsulation ooad