我还不擅长 OOD,所以很高兴收到一些建议。我将编写包装类,用于通过其API与许多社交网络和服务一起使用。我希望我的包装器可以在一个界面后面隐藏每个服务/社交网络的细节。它应该是灵活且易于重用的。
例如:
$sn = new SocialNetworks();
$sn->post(new Twitter('some post body'));
$sn->post(new Facebook(array('photo'=>'blabla.jpg')));
$sn->post(new Tumblr('long text'))->attach('blabla.jpg');
嗯,像这样的东西。那么,最好的设计解决方案是什么呢?谢谢
您可能最好为所有操作定义一个接口,然后在所有社交网络类中实现该接口。类似的东西
interface ISocialNetwork {
public function post();
}
class Twitter implements ISocialNetwork {
public function post() {
}
}
class Facebook implements ISocialNetwork {
public function post() {
}
}
$Tw = new Twitter('some post body');
$Tw->post();
我认为你应该想到一个工厂:http://en.wikipedia.org/wiki/Factory_method_pattern
也许像这样:
<?php
class Service
{
public static function build($type)
{
$class = 'Service' . $type;
if (!class_exists($class)) {
throw new Exception('Missing format class.');
}
return new $class;
}
}
class ServiceTwitter {}
class ServiceFacebook {}
try {
$object = Service::build('Twitter');
}
catch (Exception $e) {
echo $e->getMessage();
}