Scala e interfaces


En Java normalmente declararía todo mi dominio como interface s, posiblemente con algún tipo de Factory para obtener implementaciones. Esto se debe en parte a que soy tan viejo que puedo recordar cuando algunas capas de persistencia requerían clases de implementación para subclasificar una clase específica, pero también para que pueda fácilmente:

  • objetos simulados para fines de prueba
  • objetos proxy en tiempo de ejecución si es necesario
  • proporcionar diferentes implementaciones

Sigo esta práctica incluso cuando realmente no creo que realmente voy a querer hacer cualquiera de los anteriores; todavía creo que es una buena práctica por si acaso. Creo que es un enfoque bastante común.

¿Sería esto inusual en Scala-land si declaro todos los objetos de dominio abstract? ¿Los puntos anteriores también son válidos para Scala?

Author: oxbow_lakes, 2009-03-23

2 answers

Scala tiene rasgos, que son interfaces en crack. Realmente, son lo que las interfaces deberían haber sido, es cierto, hay limitaciones cuando se trata de constructores, pero eso no es realmente un gran problema teniendo en cuenta el hecho de que si tienes dos interfaces que tienen requisitos del constructor te encontrarías con los mismos problemas.

Luego hay métodos parciales, y en muchos sentidos muchos de los buenos principios de diseño orientados a objetos basados en la gestión de dependencias podrían ser visto como formas de conseguir unidades de trabajo que son más componibles, usted realmente tiene que preguntarse. En lugar de solo poder trabajar en entradas y salidas de métodos, o puntos predefinidos donde se emplea un objeto/método de estrategia, tiene un poco más de flexibilidad.

Añadir a que los objetos compañeros y de repente las fábricas y mucho más se vuelven mucho más trivial.

Dado que ese es el caso, realmente puede alejarse de tener que usar interfaces en todas partes, y con más sistema genérico, algo de lo que se hace con las interfaces se absorbe allí.

Generalmente mirando el código Scala tiende a estar bastante descompuesto, y las interfaces no parecen ser la herramienta principal en eso.

 31
Author: Saem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-24 00:47:26

Esa es una pregunta que invita a la reflexión.

No parece ser un patrón común (al menos en la Scala que he visto), pero no puedo pensar en un buen argumento en contra si eso es lo que realmente quieres hacer.

Por otro lado, no creo que lo haría de esa manera (refactorizaría cuando tuviera una necesidad real, en lugar de construir en tal "flexibilidad" para un futuro hipotético que nunca podría venir). Pero el mejor argumento en contra que puedo piense en la analogía para evitar indirectas innecesarias (no use un puntero a un puntero a un puntero a un entero cuando todo lo que necesita es un entero), y eso no es muy convincente.

 3
Author: MarkusQ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-15 00:15:22