說我們有一個一流的馬鈴薯(因此實例),其具有被用於其他方法,但不是假裝的公共屬性光滑。該屬性在創建實例時設置,僅在實例內部使用。設計模式:保存私有成員
而且,我的系統應該支持多種數據庫驅動程序,因此我有一個接口「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