【发布时间】:2011-03-22 23:41:06
【问题描述】:
我有几个不同的自定义备份程序,我想将它们组合成一个。 这样做,我正致力于我的 OO 设计,通过抽象我的服务器和数据库信息来帮助保持驱动程序简单易懂。
我正在使用两个不同的主机(折扣 ASP.net 和 Rackspace)。他们都以稍微不同的方式进行备份。
我尝试了几种不同的方法,但这是我认为最有意义的路线。
我有我的基类:
public abstract class DBServer
{
public List<Database> Databases { get; set; }
public abstract bool MakeBackupCall(Database d);
}
然后是两个派生类:
public class DASPServer : DBServer
{
public string APIKey { get; set; }
public override bool MakeBackupCall(Database d)
{
// do some stuff
return true;
}
}
public class RackspaceServer : DBServer
{
public override bool MakeBackupCall(Database d)
{
// do some different stuff
return true;
}
}
问题在于我的相关对象Database。
由于每个主机的备份过程不同,因此我需要不同的数据库信息。例如,对于 Discount ASP.net,我需要数据库的版本(2000、2005、2008),这样我就知道要调用他们的哪些 Web 服务。对于 Rackspace,我需要外部服务器名称、数据库用户名和密码来创建连接字符串。因此,我尝试创建具有以下层次结构的数据库对象。
public abstract class Database
{
public string Name { get; set; }
}
public class DASPDatabase : Database
{
public string Version { get; set; }
}
public class RackspaceDatabase : Database
{
public string ServerName { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
protected string ConnectionString
{
get { return string.Format("Data Source={0};Network Library=;Connection Timeout=30;Packet Size=4096;Integrated Security=no;Encrypt=no;Initial Catalog={1};User ID={2};Password={3}", ServerName, Name, UserName, Password); }
}
}
我想要做的是确保我的 DASPServer 实例始终获取 DASPDatabases 实例,对于 Rackspace 也是如此。或者,如果我在错误的方向上做这件事,我会想要一个耳光。
在此先感谢
【问题讨论】:
-
谁能想到比这更清晰的标题? :)
标签: c# .net architecture inheritance oop