Ruby'deki Arabirimler (veya başka bir dinamik dil) yerine ne kullanabilirim?


9

Amacım sınıflar arasındaki sözleşmeleri tanımlamak.

Ördek yazmayı ve hepsini seviyorum ama aynı zamanda dış katmandan çağrılacak yöntemin hangisinin diğer katman tarafından kullanılmaması gereken aksesuar yöntemler olduğunu açıkça tanımlamak için uygulamamın farklı katmanları arasında bir arayüz tanımlamak istiyorum. .

Örneğin Java'da get () ve save () gibi yöntemlerle bir Persistor arabirimi tanımlayabilir ve sonra veritabanında kalmam gereken tüm yöntemlerle bir JdbcPersistor sınıfı tanımlayabilirim. Ve belki uzaktaki bir sunucuya kaydetmek için başka yöntemlerle başka bir RestPersistor.

Ruby'de arayüzler istemiyorum, sadece bu ayrımı sürdürmenin düzgün bir yolu olup olmadığını bilmek. Ruby'yi seviyorum ama onunla sadece küçük projelerde çalıştım.


Sanırım bu StackOverflow'a ait ...
thorsten müller

2
@thorsten Yığın Taşması belirli uygulama sorunları içindir (yani kodda bir sorun vardır). Programla ilgili genel soruları burada Programcılar'da bulabilirsiniz.

@ Mark: düzeltme için teşekkürler. Ruby'de çok spesifik olduğunu düşündüm (ve Uberto'nun son cümlesini kaçırdım). Bu yüzden SSS hakkındaki bilgilerimi güncelledim. (Hala burada yolumu buluyorum)
thorsten müller

+1 Mükemmel soru. Tonlarca belge yazmanın, okumanın ve güncel tutmanın veya alt çizgi ile önceki dahili aksesuar yöntemleri veya bunun gibi bir şey gibi bazı aptalca sözleşmeleri kullanmanın başka bir yolu varsa ilgileniyorum.
Joonas Pulakka

+1 Bu arada, PLT Raketi sözleşmeler için desteğe sahiptir ve dinamiktir. Ruby'ye benzer bir şey eklemek ilginç bir proje olurdu.
Larry Coleman

Yanıtlar:



2

Dinamik olarak yazılan bazı dillerde arayüzler veya benzer bir kavram vardır. Örneğin, Objective-C protokolleri vardır. Ama çoğu bilmiyor. Dinamik bir dilde etkili olabilmek için, statik olarak yazılmış diller hakkında bildiklerinizi unutmanız, dilin dinamik doğasını kucaklamanız gerekir. Dinamik olarak yazılan diller genellikle arayüzlerin kullanımından kaçınır.


1

Perl 5, her iki Moose ve Moo belli yöntemler uygulanmasını gerektirebilir rolleri (ya özelliklerini) sağlamak. Moose ayrıca duck_type, gerekli yöntem kümesine sahip nesneleri bildiren bir tür olan bir tanımlamanıza izin veren çalışma zamanı türü sistemiyle birlikte gelir .

Roller sınıflar (veya diğer roller) tarafından uygulanır ve yalnızca arabirim değil, uygulama ve davranış da sağlar. Ama aynı zamanda (en azından Moose'da) yöntem çatışması algılama gibi şeyleri de ele alıyorlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.