Bir depo arabirimini uygulayan iki farklı modelde iki veri koleksiyonum var. Bunlardan biri Deposu modeliyle mükemmel uyum sağlayan düz bir listede. Diğer veri modeli bir ağaç yapısında biçimlendirilmiştir ve inşa ettiğim depo arayüzünün uygulanması çok gölgeli görünüyor. İkinci veri modelini düzleştirmeye çalışabilirim ve sadece ebeveynlere referansları kullanabilirim ancak şu anda uygulamanın bir ağaç yapısı olarak veri elde etmekten büyük faydaları vardır.Bir ağaç yapısında veri modeliyle depo düzeni uygulaması
Ağaç yapılandırılmış bir veri modeliyle bir havuz kalıbı uygulama deneyiminin olup olmadığını öğrenmek istiyorum. Şu anda benim Get(Func<T, bool> predicate)
yönteminde yinelemeli bir yöntemle listeyi düzleştiriyorum ve nesneyi bir LINQ sorgusuyla döndürüyorum ama bu uygulamanın biraz pahalıya mal olacağını düşünüyorum. Uygulamanın nasıl gerçekleştirileceğine dair ipuçları takdir edilecektir.
Burada, uygulamanın sillinesini göstermeye yardımcı olması durumunda, yüklem yöntemine göre uygulanması.
protected virtual IEnumerable<T> Get(Func<T, bool> predicate)
{
var objects = GetAll<T>();
return objects.Where(predicate);
}
DÜZENLEME: biraz daha kod
private IEnumerable<TreeData> GetRecursiveObjects(TreeData object)
{
var allChildren = new List<TreeData>();
allChildren.AddRange(object.Children);
foreach (var child in object.Children)
{
allChildren.AddRange(GetRecursiveObjects(child).ToArray());
}
return allChildren;
}
protected virtual IEnumerable<T> GetAll<T>()
{
var objects = new List<T>();
objects.AddRange(Objects);
foreach (var object in Objects)
{
objects.AddRange(GetRecursiveObjects(object));
}
return objects.OfType<T>();
}
İkinci düzenleme:
Ben de havuzuna elemanları eklemek için iyi bir strateji olacağını hakkında biraz karışık. Kullanım kodundaki ana öğenin alt öğelerine ekleme işlemlerini yapmalı mıyım, yoksa havuzun hem öğeyi hem de bir üst öğeyi alıp tüm ekleme işlemini ele alması gerekir mi?
tl; dr
bir ağaç yapısında verilerle bir depo arayüzünü uygulamayı deneme deli midir?
Sorunuzun yanıtı, gerçekten ağacınızın yapısına ve verilerinizi nasıl aradığınıza bağlı olarak değişir. Biraz daha detay verebilir misiniz? – James
GetAll yöntemi, çocukları yinelemeli olarak gider ve bunları bir listeye ekler. – Moriya
Sadece merakım için: Neden yapıyı düzleştirmede ısrar ediyorsun? Neden depo ağaca benzeyen bir yapıya geri dönmemeli? –