【发布时间】:2016-04-22 18:25:07
【问题描述】:
这是场景:
用户可以使用表单创建形状。
用户将从形状选项列表中进行选择(圆形、正方形、矩形等)并通过单击创建形状按钮提交表单。
他创建的形状将链接到他的帐户。
这是我的处理方式:
带有create() 形状的方法签名的接口Shape,将由各个形状类实现。
# Shape.php
interface Shape {
public function create();
public function area();
}
# Rectangle.php
class Rectangle implements Shape {
private $user;
private $data; # user submitted data
public __construct($user, $data) {
$this->user = $user;
$this->data = $data;
}
public function create() {
# get rectangle shape details from RectangleShapeAPI
$userShape = new UserShape; # the model to store data
$userShape->shape_id = $this->data['shape_id'];
$userShape->area = $this->area();
$userShape->users_id = $user->id;
# save rectangle shape details from API
if (!$userShape->save()) {
return false;
}
return true;
}
public function area() {
return $this->data['length'] * $this->data['breadth'];
}
}
现在,我必须 switch($shapeType) 覆盖用户选择的形状类型,以适当地实例化 Square 或 Circle 或 Rectangle 类。
$data = $_POST;
switch($shapeType) {
case 'square':
Shape $shape = new Square($user, $data);
$shape->create();
break;
and so on...
}
这是我实现
SOLID Principles的第一步,我 我想我可能弄错了。在那种情况下请原谅我。问题是我认为switch语句(我看过例子 人们在尝试时试图消除
switch或conditions使用这些对象)。我只在使用的时候看到过这个 我认为很容易实现的对象。但我们能否实现 在创建对象时相同(我找不到任何 除了switching 之外的逻辑解决方案。另一件事是,如何有效地处理
$_POST数据作为 数组的键将来可能会改变,任何事情都可能发生。如何 你会处理这种情况吗?
以上解释是我的案例的简化版。
我有一个带有add() 方法的Accounts 接口,由FacebookAccount、GoogleAccount 和其他类实现。
现在add()这些帐户的方法不同,因此用作接口。创建Facebook 或Google api 对象并获取用户数据以存储到UserAccount。这些帐户与用户相关联。
我欢迎所有愿意为我提供使用 SOLID 原则解决此问题的方法的人。我会非常感谢所有人,并希望我能学到很多关于原则和我做错的事情。
谢谢。
编辑
SOLID 原则链接:SOLID Principles Wikipedia
【问题讨论】:
-
您能否提供一个指向上述 SOLID 原则的链接?在你的情况下,我会实现一个抽象的 Shape 类并做这些事情,这对那里的所有 Shapes 都是通用的,以避免冗余。
-
我已经包含了链接。我也可以,但是
create()方法必须调用一些外部api 来获取一些数据并与UserShape对象一起存储。create()的功能因形状而异。或者在我的情况下,帐户之间的功能不同。
标签: php oop solid-principles