2012-08-07 17 views
6

Ben Scala oldukça sık desen (found this example here) bu tür bakın:Bu, Scala API'lerini tasarlamak için iyi bir dönüş tipi kalıp mı?

class UserActor extends Actor { 
    def receive = { 
    case GetUser(id) => 
     // load the user, reply with None or Some(user) 
     val user: Option[User] = ... 
     sender ! user 
    case FindAll() => 
     // find all users 
     val users: List[User] = ... 
     sender ! users 
    case Save(user) => 
     // persist the user 
     sender ! Right(user) 
    } 
} 

Yani olsun çağrı bağlı: Opsiyon [Kullanıcı], Liste [Kullanıcı], Sağ [Kullanıcı]. Bu yaklaşım iyi! Bu uygunsa, sadece çıkar ilgim var mı? Örneğin (ve bu kötü bir durum olabilir): API'yi her zaman listeye geri döndürerek denemek ve genellemek için daha iyi veya daha kötü hale getirecek mi? [Kullanıcı]? Dolayısıyla, bir kullanıcı bulunmazsa veya bir kayıt başarısız olursa, liste sadece boş olacaktır. Ben sadece merak ediyorum .... yukarıdaki 'desen' nasıl geliştirilebilir başka önerileri?

Sadece bazen bir varlık ve bazen hiçbiri ve bunların bazen bir listesini almak API bu stil için mükemmel bir model belirlemek çalışıyorum. Bunu yapmak için 'en iyi' bir yol var mı, yoksa herkes kendi rolünü oynuyor mu?

+3

Liste boş olabilir .. onların parametreleri yanı sıra (Liste [0, n] için .. Aslında API dönüş tipleri dikkat getirdiğin için –

cevap

15

dönüş türlerinin API amaçlanan davranışı açıklığa kavuşmasına yardımcı olacaktır. GetUser bir List döndü

varsa, geliştiriciler karışabilir ve birden fazla kullanıcı muhtemelen iade edilebilir merak ediyorum. Bir Option'un döndüğünü gördüklerinde, hemen amaçlanan davranışı anlayacaklardır.

keresinde açıkladığınız şekilde genelleştirilmiş olmuştu CRUD işlemleri sağlanan oldukça karmaşık API ile çalışmak zorunda kaldı. Anlaması zor, belirsiz tanımlanmış ve çalışılması zor buldum. Bence

+4

1, [0,1] için zorlayıcı olmadığını Seçenek güzel, isimler, varsayılan değerler vb.) bir çeşit dokümantasyonun çok önemli rolünü oynarlar. Dönüş türleri bazen bundan hariç tutulur, ancak bu cevapta uygun şekilde açıklandığı gibi bir hatadır. –

1

API tasarımı için çok iyi bir kalıptır. Tek bir eleman döndürmek istiyorsanız null başa gerekmez açıkçası çünkü
Ben, benim fonksiyonların dönüş türü olarak çok sık Option kullanın. Bir Seq döndürmek, birden çok öğe için doğaldır ve bir hata açıklaması döndürmek istiyorsanız, Either en uygunudur, ben genellikle G/Ç'yi ayrıştırırken kullanırım. Bazen Seq'u diğerlerinden biriyle bile birleştiririm. Büyük olasılıkla, API'nızın bir kullanıcısının tercihlerini ve hedeflerini bilmezsiniz. Bu nedenle, kullanıcılara mümkün olduğunca rahat hissettirmek için tüm bu geri dönüş türlerini sağlamaya çalışır.

İlgili konular