J'ai quelques programmes de sauvegarde personnalisés différents et je veux les combiner en un seul. Ce faisant, je travaille sur ma conception OO pour aider à garder le programme de conduite simple et facile à suivre en extrayant mes informations de serveur et de base de données. J'utilise deux hôtes différents (Discount ASP.net et Rackspace). Les deux vont sur leurs sauvegardes d'une manière légèrement différente.Comment faire pour que ma classe dérivée accepte uniquement un type dérivé spécifique d'un autre objet
J'ai essayé d'examiner quelques approches différentes, mais voici le chemin qui me semble le plus logique.
J'ai ma classe de base:
public abstract class DBServer
{
public List<Database> Databases { get; set; }
public abstract bool MakeBackupCall(Database d);
}
puis deux classes dérivées:
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;
}
}
Le problème vient avec mon objet lié Database
. Étant donné que les processus de sauvegarde sont différents pour chaque hôte, j'ai besoin d'informations différentes pour les bases de données. Par exemple, pour Discount ASP.net j'ai besoin d'une version (2000, 2005, 2008) pour la base de données afin que je sache lequel de leurs services Web appeler. Pour Rackspace, j'ai besoin du nom de serveur externe, du nom d'utilisateur de la base de données et des mots de passe pour créer une chaîne de connexion. Pour cette raison, j'ai essayé de créer un objet de base de données avec la hiérarchie suivante.
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); }
}
}
Ce que je veux faire, est de vous assurer que mon instance DASPServer obtient toujours des cas de DASPDatabases, et même avec Rackspace. Sinon, je voudrais un claquement dans la tête si je vais à ce sujet dans la mauvaise direction.
Un grand merci à l'avance
quelqu'un peut-il penser à un titre plus clair que cela? :) – earthling