C# 'de jenerikler için yeni ve programımın diğer bölümlerinin model nesneleri isteyebileceği bir depolama alanı oluşturmaya çalışıyorum. Buradaki öneri, eğer önbellek sınıfım nesneye sahipse, tarihini kontrol eder ve eğer nesne 10 dakikadan büyük değilse geri döndürürdü. 10 yaşından büyükse, çevrimiçi olarak sunucudan güncelleştirilmiş bir model indirir. Nesnenin yüklemediği ve döndürmediği bir şey yoktur.Nesneleri önbelleğe alan bir sınıfı nasıl oluşturabilirim?
Ancak, nesnelerimi bir DateTime ile eşleştirerek bazı sorunları çözüyorum.
// model
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person p = new Person();
Cache c = new Cache();
p = c.Get<Person>(p);
}
}
public class Cache
{
struct DatedObject<T>
{
public DateTime Time { get; set; }
public T Obj { get; set; }
}
List<DatedObject<T>> objects;
public Cache()
{
objects = new List<DatedObject<T>>();
}
public T Get<T>(T obj)
{
bool found = false;
// search to see if the object is stored
foreach(var elem in objects)
if(elem.ToString().Equals(obj.ToString()))
{
// the object is found
found = true;
// check to see if it is fresh
TimeSpan sp = DateTime.Now - elem.Time;
if(sp.TotalMinutes <= 10)
return elem;
}
// object was not found or out of date
// download object from server
var ret = JsonConvert.DeserializeObject<T>("DOWNLOADED JSON STRING");
if(found)
{
// redate the object and replace it in list
foreach(var elem in objects)
if(elem.Obj.ToString().Equals(obj.ToString()))
{
elem.Obj = ret;
elem.Time = DateTime.Now;
}
}
else
{
// add the object to the list
objects.Add(new DatedObject<T>() { Time = DateTime.Now, Obj = ret });
}
return ret;
}
}
Eşleşen nesnelerde sorun/hata hakkında daha fazla bilgi verebilir misiniz? Muhtemelen 'DatedObject' için yapı yerine sınıfı deneyebilir ve kendi sınıf nesnesini oluşturmak istemezseniz, Tuple – Rex
[Akavache] (https://github.com/github/Akavache) 'yi denemeye değer olabilirsiniz. içine. –