Windows Kayıt Defteri (veya dosya sistemi) nesneleri işlemek için en iyi OO Design Pattern nedir?

0 Cevap php

PHP'nin COM sınıfı aracılığıyla Windows Kayıt Defteri işlemek için STDREGPROV dayalı bir sınıf veya iki inşa ediyorum. Bilinen tüm STDREGPROV yöntemleri ve türlerine referans için bakınız: http://msdn.microsoft.com/en-us/library/aa393664%28v=VS.85%29.aspx. (Hatta bana zaten bu soruna yönelik geçici çözümler buldum. Ben bir adlandırılmış değer almak veya değerini ayarlamak için sadece ne Reg tür bilmek zorunda olduğu gerçeği başladı, ama tüm ana anahtar ile Enuming alır alamadım .)

Ben ortak kayıt fonksiyonları işlemek anlamına kendine özgü özellikleri ve yöntemleri ile bir PHP nesneye her bir anahtar veya adlandırılmış bir değer atıyorum - vb anahtar liste alt tuşları, ekleme / güncelleme tuşları ve adlandırılmış değerleri liste adında değerler, bir problem Ben öngörüyoruz benim komut dosyası çalışırken, başka bir işlem ya da benim kod bir eylem kayıt anahtarlarının yolları veya adlandırılmış tüm değerleri değiştirmek veya tamamen hepsini silmek, böylece onlara dayalı herhangi bir varolan nesneleri vidalama eğer - ne benzer bir sorun gerçek bir dosya sistemi nesneleri ile çalışırken karşılaşabilirsiniz. Registry hariç, hiçbir kilit yoktur.

Ben daha önce bir Key İçerik listelenen bir kayıt defteri adında değerini silin Örneğin, ben İçindekiler yalan ve hala adında değeri var olduğunu bana söyleyebilir nesne olduğunu, daha önce oluşturulan nesne. Ben başka bir işlem zaten silinmiş veya taşınmış şeyin değerini değiştirdiyseniz, bu kayıt defterinde bir şey yaratmak veya üzerine olsaydı ya, böylece potansiyel olarak benim OS vidalama.

Soru anahtarları ve adlandırılmış değerleri ne OO tasarım deseni (ya da bu konuda dosya sistemi nesneleri) Kayıt Defteri ile çalışmak için en iyi, haber vermeden değiştirebilir bilerek, nedir?

Edit: Ben onu biraz değiştirmek için gidiyorum düşünüyorum. Bunun yerine her yerde ayrı ayrı nesneler olarak başıboş adlandırılan değerlere sahip, ben yerine kendi ana anahtar nesne özellikleri olarak bunları yapmak için gidiyorum. Her adlandırılmış değer (bu bellek sızıntıları veya sonsuz özyineleme sorunlara neden olmaz parmak kapısı) akım yolu bulunuyor almak için bu üst bulunuyor anahtar nesne için bir iç referans olacaktır. Burada temel fikir ...

$key->value($name_or_index)->name; // get or set name
$key->value($name_or_index)->type; // get or set type
$key->value($name_or_index)->value; // get or set value
$key->value($name_or_index)->delete(); // delete this value, then destroys itself
$key->add_value($new_name, $reg_type, $value);
$key->parent; // get or set parent key path
$key->name; // get or set name
$key->delete();  // deletes key, unsets all child objects, nulls itself out
Reg::add_key($path); // abstract factory API returning new key as object
Reg::get_key($path); // abstract factory API returning existing key as object

Reg ana sınıfı da diğer tüm nesneler tarafından erişilebilen tek bir statik COM arabirimini tutar, ve diğer tüm sınıfları türetilmiştir budur. Ben de Kayıt Defteri ile doğrudan etkileşim için tüm yöntemleri tutabilir sanırım, ve tüm günlük / fail-safe yöntemleri. Bu anlamda, bir soyut fabrika API olması ve beni oldukça küçük diğer türetilmiş sınıfları devam edelim istiyorum.

MainMa Aşağıda önerildiği gibi, bir anahtarı veya değeri olan herhangi bir erişim istenmeyen "önbellek" davranışı önlemek için düz Kayıt Defteri değerlerini alacak. Ve, ben geri rolüne WIN başlangıçta benim komut dosyası tarafından yazılmış herhangi bir eksik işlem ayarlanmış bir fail-safe. Reg dosyası olacak. Benim komut başarıyla tamamlanırsa, bu. Reg dosyasını ve ucunda başlangıç ​​giriş silinir. Güç orta vadede gider Aksi takdirde, ben güvenli olmalıdır.

Ben ... Bu iyi tasarım olduğunu tahmin?

0 Cevap