【发布时间】:2009-12-22 05:45:31
【问题描述】:
我是 Ruby 新手,主要来自 C# 和 ActionScript 3(以及其他语言)。我对抽象功能很好奇。具体来说,包装和抽象 Ruby 的 FTP 和 SFTP 库。
我四处寻找,发现了一个名为 Backup 的宝石。它确实引起了我的注意,因为它支持通过 S3、SCP、SFTP 和 FTP 备份内容。所以我想,“哇,这是一个完美的例子!”我开始浏览源代码,但后来我遇到了如下代码:
case backup.procedure.storage_name.to_sym
when :s3 then records = Backup::Record::S3.all :conditions => {:trigger => trigger}
when :scp then records = Backup::Record::SCP.all :conditions => {:trigger => trigger}
when :ftp then records = Backup::Record::FTP.all :conditions => {:trigger => trigger}
when :sftp then records = Backup::Record::SFTP.all :conditions => {:trigger => trigger}
end
view the full source on GitHub
到处都是 case/when 语句!如果我在 C# 中对此进行攻击,我会编写一个协议接口(或抽象类)并让 FTP 和 SFTP 实现它。然后我的客户端类将只传递一个协议实例而不关心实现。零开关/外壳。
如果在这种情况下使用 Ruby 进行编码,我希望能提供一些关于最佳实践的指导。
【问题讨论】:
标签: ruby oop ftp sftp abstraction