Qui di seguito sono esempi semplificati, ma mi chiedo quale strada intraprendere quale è la migliore pratica quando si progetta l'API, il semplice o il più complesso e robusto che è meglio?
-
Questo sembra buono e va di pari passo con i concetti di scala ADT, ma temo che diventerebbe eccessivamente complesso e i client che usano la mia API mi odieranno un po 'per complicarli con troppi oggetti per pensare a cosa passare alla mia interfaccia. / p>
trait ProcessUpdate { def name: String def id: String def message: String } case class SuccessProcessUpdate(name: String, id: String, message: String) extends ProcessUpdate case class FailureProcessUpdate(name: String, id: String, message: String, e: Exception) ProcessUpdate def success(successUpdate: SuccessProcessUpdate) def fail(failUpdate: FailureProcessUpdate)
-
Questo è semplice, penso che quelli che usano questa API mi apprezzeranno meglio, ma non sono sicuro che sia abbastanza robusto.
trait ProcessUpdate { def name: String def id: String def message: String def e: Option[Exception] } case class ProcessUpdateInfo(name: String, id: String, message: String, e: Option[Exception]) def update(processUpdate: ProcessUpdate)
Che ne pensi? c'è una risposta giusta? questo esempio è stato semplicistico, più la cosa è complessa più difficile è la domanda.