我有两台服务器,我将从一个客户端连接到这两台服务器。对于每个服务器,我将执行ftp "put“和"rm”。
我是否应该构建一个外观,并拥有一个这样的界面:
void putFileOnServer1(String file)
void putFileOnServer2(String file)
void removeFromServer1(String file)
void removeFromServer2(String file)而且,外观是否应该处理所有连接的建立和断开?如果是这样的话,是否应该使用工厂来这样做呢?
发布于 2011-09-30 06:29:47
您有两个方法: PutFileOnServer和RemoveFromServer。您要放置或从中移除的服务器应该是抽象的一部分。
发布于 2011-09-30 07:20:10
ftp服务器是否有不同的接口?或者,它们是否都理解您想要使用的同一组命令?
FtpServer类。并创建一个接受多个服务器的FtpClient类,例如,您可以通过某个键选择这些服务器。(至少在某种程度上,这可能是我会做的事情)。class FtpClient { public function addServer( FtpServer $server,$key );public function selectServer( $key );public function putFileOnServer( $file );public function removeFileFromServer( $file );}
类FtpServerFoo {公共函数selectFile( $file );公共函数removeSelectedFile();}类FtpServerBar {公共函数removeFile( $file );}
..。您应该查看Adapter Pattern:
抽象类FtpServer {抽象公共函数putFile( $file );抽象公共函数removeFile( $file );}类FtpServerAdapterFoo扩展FtpServer {公共函数__construct( FtpServerFoo $server ){}公共函数removeFile( $file ){$this->服务器->selectFile( $file );$this->服务器->removeSelectedFile();}}类FtpServerAdapterBar扩展FtpServer { public function __construct( FtpServerBar $server ){} public function removeFile( $file ){ $this->server->removeFile( $file );}} $cilent = FtpClient();$client->addServer( new FtpServerAdapterFoo( new FtpServerFoo() ),0 );$client->addServer( new FtpServerAdapterBar( new FtpServerBar() ),1 );$client->selectServer( 0 );$client->putFileOnServer( $file );$client->selectServer( 1 );$client->removeFileFromServer( $someOtherfile );FTP
不过,这里并没有涉及到真正的门面模式。
发布于 2011-09-30 06:34:21
您通常使用facades来降低多种对象类型之间的复杂性。不过,在本例中,您似乎只想使用一个函数“类型”,即"FTPServer“。因此,在很大程度上,您应该只有两个此类型的实例,并且此类型将有一个"put“和"remove”方法。
当您添加不必要的功能点时,实际上增加了维护的复杂性。例如,如果您需要向函数添加一个新参数(可能是访问限制或其他什么),您不仅需要针对每个使用位置进行更改,而且现在还必须添加到每个外观方法中。抽象应该减少这种类型的耦合,而不是增加它。
https://stackoverflow.com/questions/7604033
复制相似问题