Temel XML'yi (bir OXM gibi) modelleyen bir dizi Ruby nesnesine sahibim. Maalesef, XML değiştiriliyor ve ilgili sürüm çarpıyor. Her iki sürümü de ele alabilmek için Ruby nesnelerini güncellemem gerekiyor. Yöntemlerimde bir ton if/else cümlesinden daha temiz bir şey isterim, çünkü bu muhtemelen tekrar meydana gelebilir. Bunu halletmek için deyimsel bir Ruby yolu var mı? BenBir Ruby Nesnesi Sürümünü Oluşturma
class XMLModel
class V1
# V1 specific implementation
end
class V2;
# V2 specific implementation
end
def initialize
# create a new V? and set up delegation to that specific version of the object
end
def from_xml(xml_string)
# use the XML string to determine correct version and return a
# specific version of the object
end
end
yukarıdaki yöntem hakkında güzel bir şey, her versiyon kodu içinde farklıdır ve bana eklemek için izin olmasıdır/damla yani sınıflar "sürüm" Çeşitli için proxy olarak baz sınıfını kullanmayı düşünüyorum geriye dönük uyumluluk testine sahip versiyonlar. Kötü olan şey, büyük olasılıkla kod çoğaltmasıyla sonuçlanacağım. Ayrıca, bu durumda, XMLModel.new
yeni bir XMLModel
döndürür, XMLModel.from_xml
fabrika yöntemi yeni bir XMLModel::V1
döndürür.
Fikirler?
Eğer XMLModel başlatma (yani 'new') 'de' if' deyimi ... Ben ayrı fabrika intialization, yani 'XMLModel.create' kullanmadan görünüyor olamayacağını gizlemek Can. Kullanıcıların sürüm hakkında bilgi sahibi olmamasını ve nesneyi normal bir Ruby nesnesi olarak kullanabilmesini ve 'XMLModel.new' adını vermesini ve böylece modelin arkasındaki tüm uygulamayı gizlemesini istemiyorum. –
'' new''i geçersiz kılabilirsiniz. Varsayılan yeni yöntem (sanırım) şöyle bir şeydir: 'def new (* args); obj = tahsis etmek; obj.initialize (* args); retrun obj; End one Tek liner için üzgünüm, yorumlar ve kodlar iyi karışmıyor. – Ian
redefining daha fazla ayrıntı ile bir cevap ekledi :: yeni – Ian