说我们有一个一流的马铃薯(因此实例),其具有被用于其他方法,但不是假装的公共属性光滑。该属性在创建实例时设置,仅在实例内部使用。设计模式:保存私有成员
而且,我的系统应该支持多种数据库驱动程序,因此我有一个接口“DATABSE适配器”,将与使用我想在目前使用的驱动程序类实例化。
现在出现这个问题。我需要的对象(马铃薯)持续的,并将其保存到数据库中,因此,我通过使用数据库适配器类拯救我们的土豆的平滑度,但..它是私有的! 如何发送马铃薯的平滑度,而不使其用于其他用途访问?
预先感谢
说我们有一个一流的马铃薯(因此实例),其具有被用于其他方法,但不是假装的公共属性光滑。该属性在创建实例时设置,仅在实例内部使用。设计模式:保存私有成员
而且,我的系统应该支持多种数据库驱动程序,因此我有一个接口“DATABSE适配器”,将与使用我想在目前使用的驱动程序类实例化。
现在出现这个问题。我需要的对象(马铃薯)持续的,并将其保存到数据库中,因此,我通过使用数据库适配器类拯救我们的土豆的平滑度,但..它是私有的! 如何发送马铃薯的平滑度,而不使其用于其他用途访问?
预先感谢
编写一种方法,允许对象以某种类型的作者为参数保存自己。由于这是一个数据库,因此您可能需要同时具有插入和更新方法,而不仅仅是一个Save方法。您也可以将它们放入界面中。
粗糙例如:
public interface IDatabaseSaveable
{
void InsertToDatabase(Database pDatabase);
void UpdateDatabase(Database pDatabase);
}
public class Potato : IDatabaseSaveable
{
private int mID;
private double mSmoothness;
public void InsertToDatabase(Database pDatabase)
{
pDatabase.InsertToPotatoes(mID, mSmoothness, ...);
}
public void UpdateDatabase(Database pDatabase)
{
pDatabase.UpdatePotatoes(mID, mSmoothness, ...);
}
}
这是在具有标记为internal
的平滑度的性质的变化。假设马铃薯在使用前必须有一个smoothness
,那么内部构造函数可能会更好。我会相信,有一个很好的理由来隐藏顺畅。也许对土豆方面谦虚?
public class Potato
{
internal int Smoothness { get; set; }
internal Potato(int smoothness)
{
this.Smoothness = smoothness;
}
private Potato() { }
}
同一程序只有类可以使用内部的构造方法实例Potato
。并且只有同一个程序集中的类才能访问Smoothness(以便他们可以保存马铃薯)。
您可以创建一个导入/导出接口,一对外部化的Potato
的“状态”没有给访问它的实现细节(在这种情况下,它的私有成员和数据类型)。他们是建设者的类型。
public class Potato {
public interface IExporter {
void AddSmoothness(string value);
}
public interface IImporter {
string ProvideSmoothness();
}
public Potato(IImporter importer) {
this.smoothness = int.Parse(importer.ProvideSmoothness());
}
public void Export(IExporter exporter) {
exporter.AddSmoothness(this.smoothness.ToString());
}
public Potato(int smoothness) {
this.smoothness = smoothness;
}
private int smoothness;
}
然后,你的数据库适配器类将实施的相关接口,并使用相应的方法。看原始创意here。
如何平滑属性决定?如果它来自其他属性,则不需要存储它。如果不是,那么它从哪里来? – mellamokb 2012-04-09 21:20:29
实现访问 – zerkms 2012-04-09 21:20:56
你有没有想过使用私人二传手?这样,平滑度不能由实例外的任何人设置,但可以检索。任何类(包括数据库适配器)都需要读取此值才能写入数据库。 – 2012-04-09 21:23:02