Je veux créer une classe qui stocke les tables de données, cela permettra d'éviter mon application pour importer une liste de détails à chaque fois que je veux le récupérer. Donc cela devrait être fait une fois, je crois que le code suivant ne sorte, mais je ne suis pas sûr si c'est thread-safe.
Le code ci-dessous est dans la Couche de la Section de mes trois d'application de la couche, il est de retour d'une DataTable à la Couche de Présentation.
public class BusinessLayerHandler
{
public static DataTable unitTable;
public static DataTable currencyTable;
public static DataTable GetUnitList()
{
//import lists each time the application is run
unitTable = null;
if (unitTable == null)
{
return unitTable = DatabaseHandler.GetUnitList();
}
else
{
return unitTable;
}
}
public static DataTable GetCurrencyList()
{
//import lists each time the application is run
currencyTable = null;
if (currencyTable == null)
{
return currencyTable = DatabaseHandler.GetCurrencyList();
}
else
{
return currencyTable;
}
}
Toute aide est appréciée, si il ya une meilleure façon de mettre en cache une DataTable s'il vous plaît laissez-moi savoir.
Mise à jour:
Merci pour votre avis, c'est la méthode suggérée pour le faire, si j'ai bien compris:
public class BusinessLayerHandler
{
private static DataTable unitTable;
private static DataTable currencyTable;
private static readonly object unitTableLock = new object();
private static readonly object currencyTableLock = new object();
public static DataTable GetUnitList()
{
//import lists each time the application is run
//unitTable = null;
lock (unitTableLock)
{
if (unitTable == null)
{
return unitTable = DatabaseHandler.GetUnitList();
}
}
return unitTable;
}
public static DataTable GetCurrencyList()
{
//import lists each time the application is run
lock (currencyTableLock)
{
if (currencyTable == null)
{
return currencyTable = DatabaseHandler.GetCurrencyList();
}
}
return currencyTable;
}
}